@@ -36,10 +36,11 @@ internal class Program
3636 // The main application program.
3737 internal static void Main ( )
3838 {
39+ Encoding . RegisterProvider ( CodePagesEncodingProvider . Instance ) ; // Enable support for encodings like ShiftJIS
40+
3941 DoBasicDemo ( ) ;
4042 DoVarietyDemo ( ) ;
41- DoSegmentDemo ( ) ;
42- DoMaskDemo ( ) ;
43+ DoEncodingDemo ( ) ;
4344 DoBinaryDemo ( ) ;
4445 }
4546
@@ -48,8 +49,8 @@ internal static void Main()
4849 // Creates a single QR code, then writes it to an SVG file.
4950 private static void DoBasicDemo ( )
5051 {
51- const string text = "Hello, world!" ; // User-supplied Unicode text
52- var errCorLvl = QrCode . Ecc . Low ; // Error correction level
52+ const string text = "Hello, world!" ; // Payload text
53+ var errCorLvl = QrCode . Ecc . Low ; // Minimal error correction level
5354
5455 var qr = QrCode . EncodeText ( text , errCorLvl ) ; // Make the QR code symbol
5556 SaveAsSvg ( qr , "hello-world-QR.svg" , border : 4 ) ; // Save as SVG
@@ -65,11 +66,7 @@ private static void DoVarietyDemo()
6566
6667 // Alphanumeric mode encoding (5.5 bits per character)
6768 qr = QrCode . EncodeText ( "DOLLAR-AMOUNT:$39.87 PERCENTAGE:100.00% OPERATIONS:+-*/" , QrCode . Ecc . High ) ;
68- SaveAsSvg ( qr , "alphanumeric-QR.svg" , 2 ) ;
69-
70- // Unicode text as UTF-8
71- qr = QrCode . EncodeText ( "こんにちwa、世界! αβγδ" , QrCode . Ecc . Quartile ) ;
72- SaveAsSvg ( qr , "unicode-QR.svg" , 3 ) ;
69+ SaveAsSvg ( qr , "alphanumeric-QR.svg" , 4 ) ;
7370
7471 // Moderately large QR code using longer text (from Lewis Carroll's Alice in Wonderland)
7572 qr = QrCode . EncodeText (
@@ -83,74 +80,14 @@ private static void DoVarietyDemo()
8380 SaveAsSvg ( qr , "alice-wonderland-QR.svg" , 10 ) ;
8481 }
8582
86-
87- // Creates QR codes with manually specified segments for better compactness.
88- private static void DoSegmentDemo ( )
83+ private static void DoEncodingDemo ( )
8984 {
90- // Illustration "silver"
91- const string silver0 = "THE SQUARE ROOT OF 2 IS 1." ;
92- const string silver1 = "41421356237309504880168872420969807856967187537694807317667973799" ;
93- var qr = QrCode . EncodeText ( silver0 + silver1 , QrCode . Ecc . Low ) ;
94- SaveAsSvg ( qr , "sqrt2-monolithic-QR.svg" , 3 ) ;
95-
96- var segs = new List < QrSegment >
97- {
98- QrSegment . MakeAlphanumeric ( silver0 ) ,
99- QrSegment . MakeNumeric ( silver1 )
100- } ;
101- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . Low ) ;
102- SaveAsSvg ( qr , "sqrt2-segmented-QR.svg" , 3 ) ;
103-
104- // Illustration "golden"
105- const string golden0 = "Golden ratio φ = 1." ;
106- const string golden1 =
107- "6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374" ;
108- const string golden2 = "......" ;
109- qr = QrCode . EncodeText ( golden0 + golden1 + golden2 , QrCode . Ecc . Low ) ;
110- SaveAsSvg ( qr , "phi-monolithic-QR.svg" , 5 ) ;
111-
112- segs = new List < QrSegment >
113- {
114- QrSegment . MakeBytes ( Encoding . UTF8 . GetBytes ( golden0 ) ) ,
115- QrSegment . MakeNumeric ( golden1 ) ,
116- QrSegment . MakeAlphanumeric ( golden2 )
117- } ;
118-
119- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . Low ) ;
120- SaveAsSvg ( qr , "phi-segmented-QR.svg" , 5 ) ;
121-
122- // Illustration "Madoka": kanji, kana, Cyrillic, full-width Latin, Greek characters
123- const string madoka = "「魔法少女まどか☆マギカ」って、 ИАИ desu κα?" ;
124- qr = QrCode . EncodeText ( madoka , QrCode . Ecc . Low ) ;
125- SaveAsSvg ( qr , "madoka-utf8-QR.svg" , 4 ) ;
126-
127- segs = new List < QrSegment > { QrSegmentAdvanced . MakeKanji ( madoka ) } ;
128- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . Low ) ;
129- SaveAsSvg ( qr , "madoka-kanji-QR.svg" , 4 ) ;
85+ // ShiftJIS encoding so Kanji characters are compactly encoded (13 bits per character)
86+ var qr = QrCode . EncodeTextAdvanced ( "こんにちは" , QrCode . Ecc . Medium , eci : ECI . ShiftJIS ) ; // Japanese "Hello"
87+ SaveAsSvg ( qr , "kanji-QR.svg" , 4 ) ;
13088 }
13189
13290
133- // Creates QR codes with the same size and contents but different mask patterns.
134- private static void DoMaskDemo ( )
135- {
136- // Project Nayuki URL
137- var segs = QrSegment . MakeSegments ( "https://www.nayuki.io/" ) ;
138- var qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . High ) ;
139- SaveAsSvg ( qr , "project-nayuki-automask-QR.svg" , 6 ) ;
140- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . High , QrCode . MinVersion , QrCode . MaxVersion , 3 ) ; // Force mask 3
141- SaveAsSvg ( qr , "project-nayuki-mask3-QR.svg" , 6 ) ;
142-
143- // Chinese text as UTF-8
144- segs = QrSegment . MakeSegments ( "維基百科(Wikipedia,聆聽i/ˌwɪkᵻˈpiːdi.ə/)是一個自由內容、公開編輯且多語言的網路百科全書協作計畫" ) ;
145- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . Medium , QrCode . MinVersion , QrCode . MaxVersion , 0 ) ; // Force mask 0
146- SaveAsSvg ( qr , "unicode-mask0-QR.svg" ) ;
147- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . Medium , QrCode . MinVersion , QrCode . MaxVersion , 1 ) ; // Force mask 1
148- SaveAsSvg ( qr , "unicode-mask1-QR.svg" ) ;
149- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . Medium , QrCode . MinVersion , QrCode . MaxVersion , 5 ) ; // Force mask 5
150- SaveAsSvg ( qr , "unicode-mask5-QR.svg" ) ;
151- qr = QrCode . EncodeSegments ( segs , QrCode . Ecc . Medium , QrCode . MinVersion , QrCode . MaxVersion , 7 ) ; // Force mask 7
152- SaveAsSvg ( qr , "unicode-mask7-QR.svg" ) ;
153- }
15491
15592 private static void DoBinaryDemo ( )
15693 {
0 commit comments