UTF-8とUTF-16。プログラマーのためのいくつかのヒント

前書き

情報および電子コンピュータのデジタル伝送のための最初のデバイスの出現により、1と0のシーケンスを使用してテキスト文字をエンコードするという問題が発生しました。情報表示の最小単位はバイトです。これに基づいて、1963年に米国で、ASCII(情報交換用の米国標準コード)コードテーブルが開発され、標準化され、その後、8ビットエンコーディングを使用して拡張されました。まず第一に、この表の助けを借りて、それは英語の数字と文字をエンコードすることになっていた。表の最初の128文字を図1に示します。





図1。 ASCIIテーブルの最初の128文字。
図1。ASCIIテーブルの最初の128文字。

表(図1)のセル番号はシンボルコードです。例として、Helloという単語をエンコードすることを検討してください。文字が配置されているASCIIテーブルのセルの番号:72(H)、101(e)、108(l)、111(o)。バイナリ表現のワードコードは次のようになります。





00010 010H10100 110e00110 110l00110 110l11110 110o)(右側の最上位ビット)。





バイナリ表現で下線が引かれた太字のコードは、表のセル番号に対応しています(図1)。コード生成アルゴリズムは次のとおりです。





1. – (). 010 – , 011 – .





2. – .





, 128 ASCII , . 128 (8 256 ) . , , 8 .





Unicode () – , ( ) . , ( ) .





.





« » UCS (Universal Coded Character Set), ISO/IEC 10646. UCS , , .





, .. , , UTF (Unicode Transformation Format): UTF-8, UTF-16 UTF-32





UTF-8 – , : 8, 16, 24 32.





UTF-16 – , :16 32.





UTF-8 UTF-16 UCS.





UTF-8

RFC (Request For Comments) 3629. RFC:





0xxxxxxx





110xxxxx 10xxxxxx





1110xxxx 10xxxxxx 10xxxxxx





11110xx 10xxxxxx 10xxxxxx 10xxxxxx





. ( ):





0 – 8- ,





110 – 16- ,





1110 – 24- ,





11110 – 32 .





10 – ( ), .





128 ASCII. 1040-1103.





« Hello».





( ):





00001011 11111001 () 00001011 00001101 () 00001011 11111101 () 00001011 00001101 () 00000100 () 00010010 (H) 10100110 (e) 00110110 (l) 00110110 (l) 11110110 (o).





1055, 10000011111 – 11 . 11010 – . Hello 1 , ASCII.





UTF-8 , , , , .





UTF-16

2000 RFC 2781, UTF-16, 16 32 . 0-55295 57344-65535 16 ( ), , 16, 32 . « Hello».





( ):





11111000 00100000 () 00001100 001000000 () 11111100 00100000 () 00001100 001000000 () 00000100 00000000 () 00010010 00000000 (H) 10100110 00000000 (e) 00110110 00000000 (l) 00110110 00000000 (l) 111110110 00000000 (o).





16 , .





, 65535. , .2:





図2。 古代チュルク語のアルファベットの手紙。
.2. .

– 68620 (010COC).





UTF-16 :





  1. 010000. 20 . : 010COC – 0x10000 = 0xC0C.





  2. 10 10 . 00 , 00000000110000001100, 10 , – 10 .





  3. 0xD800 (11011000 00000000) 003 (00000000 00000011), 10 , . 0xD800 + 003 =  0D803 (11011000 00000011) – 16 UTF-16.





  4. 0xDC00 (11011000 00000000) 00C (00000000 00001100), 10 , №2. 0xD00 + 00 =  D0 (11011100 00001100) – 16 UTF-16.





  5. UTF-16, , , 3 4: 0D803DC0C (11011000 00000011 11011100 00001100).





UTF-8 UTF-16 ,

1.





1. .





    





0-127





128 - 2047





2048-32767





32768-65535





65535-





1048575





1048575-…





UTF-8





8





16





24





32





32





_





UTF-16





16





16





16





16





32





32





1 , . , 128-2047, 65535-1048575 UTF-8 UTF-16 . 0-127 UTF-8, , , . 2048-32767 32768-65535 UTF-16, , , ( 12549-12589). , , 1048575 UTF-16. 





« Hello» UTF-8 UTF-16. UTF-8 14 , UTF-16 20 , - 000. , , UTF-8.





: UTF-8, UTF-16. UTF-8, , .





, , . 12549-12589 , , UTF-16 . , , , . – button. - , . :





1. , , . , , , .





2.  . , . UTF-16. .





3. , -, – , – . , , , , .





, . , ü , , 252 : u, 117 ¨, 776. . , . , u, , ü, u.








All Articles