2013年12月13日金曜日

Unicode 理解度簡易チェック

次のことが理解できているかを簡単に調べることができます。

  • UTF-8 は Unicode の文字符号化方式の一つである
    (Unicode と UTF-8 の違いが分かっているか?)
  • Java や Objective-C でプログラミングするときに文字の値は UTF-16 になっている
    (ちゃんとプログラミングできるか?)

下記の表の内容を見て、全て理解できれば OK です。



Unicode の規格でこの文字に割り当てられた
Unicode スカラ値 (十六進数表記)
U+3042
この文字の Unicode スカラ値を UTF-8
符号化したときのバイト列 (十六進数表記)
E3 81 82
(3 バイト)
この文字の Unicode スカラ値を UTF-16BE
符号化したときのバイト列 (十六進数表記)
30 42
(2 バイト)
この文字の Unicode スカラ値を UTF-16LE
符号化したときのバイト列 (十六進数表記)
42 30
(2 バイト)
この文字の Unicode スカラ値を UTF-32BE
符号化したときのバイト列 (十六進数表記)
00 00 30 42
(4 バイト)
この文字の Unicode スカラ値を UTF-32LE
符号化したときのバイト列 (十六進数表記)
42 30 00 00
(4 バイト)
// Java

char ch = "あ".charAt(0);   // ch == 0x3042
// Objective-C

NSString *s = @"あ";
unichar ch = [s characterAtIndex:0];   // ch == 0x3042
(おまけ) この文字を Shift-JIS
符号化したときのバイト列 (十六進数表記)
82 A0
(2 バイト)




𠮷 (UTF-16 のとき、サロゲートペア)
Unicode の規格でこの文字に割り当てられた
Unicode スカラ値 (十六進数表記)
U+20BB7
この文字の Unicode スカラ値を UTF-8
符号化したときのバイト列 (十六進数表記)
F0 A0 AE B7
(4 バイト)
この文字の Unicode スカラ値を UTF-16BE
符号化したときのバイト列 (十六進数表記)
D8 42 DF B7
(4 バイト)
この文字の Unicode スカラ値を UTF-16LE
符号化したときのバイト列 (十六進数表記)
42 D8 B7 DF
(4 バイト)
この文字の Unicode スカラ値を UTF-32BE
符号化したときのバイト列 (十六進数表記)
00 02 0B B7
(4 バイト)
この文字の Unicode スカラ値を UTF-32LE
符号化したときのバイト列 (十六進数表記)
B7 0B 02 00
(4 バイト)
// Java

String s = "𠮷";
int  len = s.length();    // len == 2
char ch1 = s.charAt(0);   // ch1 == 0xD842
char ch2 = s.charAt(1);   // ch2 == 0xDFB7
// Objective-C

NSString *s = @"𠮷";
int len     = [s length];               // len == 2
unichar ch1 = [s characterAtIndex:0];   // ch1 == 0xD842
unichar ch2 = [s characterAtIndex:1];   // ch2 == 0xDFB7