Unicode の変更点   

  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • Unicode へ行く。

#author("2016-09-20T03:09:21+00:00","default:pentacle","pentacle")
* Unicode [#jd0429f1]
文字集合(抽象的なもの) : 現在は 32bit で表現する~
~
理論上、4294967296文字 ( = 42億文字 ) 表現可能だが、半分のビット+アルファ程度しか使われない~
1文字を U+xxxx か U+Axxxx のようなコードで表す~
A の部分は面と呼ばれ、U+xxxx のように4ケタのものは0面のこと~
(0面は 16bit あるので 65536文字扱える)~
「あ」: U+3042

- unicode での「面」は 16面まであり、その上位概念の「群」は使用しない
- 0面の D800-DFFF は後述のサロゲートペアに使用されるため、文字は割当たっていない

* UTF-8/UTF-16/UTF-32 [#nc397046]
エンコーディング : Unicode をどう実装しているか~
~
8/16/32 はビット処理の単位 = その単位で1文字を表す~
1単位で足りない場合は2個セットで1文字、3個セットで1文字のように伸びる~
UTF-32 の場合は Unicode 空間全てを表現できるので必ず1文字 32bit~
(ただし a 等のどんなに簡単な文字でも必ず 32bitを使ってしまうため、同じテキストでも容量を食ってしまうという欠点がある)

** 基本的なもの [#dd6f2a16]
|A|~|~|~|
|Unicode|U+0041 |||
|UTF-8  |41     |||
|UTF-16 |4100   |||
|HTML   |&#x0041|||

|Д|~|~|~|
|Unicode|U+0414 |||
|UTF-8  |D0 94  |||
|UTF-16 |1404   |||
|HTML   |&#x0414|||

|「あ」|~|~|~|
|Unicode| U+3042      |        ||
|UTF-8  | E3 81 82    |perl/php||
|UTF-16 | 4230        |java    |byteorder で 30 と 42 が逆|
|HTML   | あ|        | unicode の数値そのまま |

** UTF-16 サロゲートペア [#za0207bb]
UTF-16に限り、16bit で足りないものはサロゲートペア(つまり2文字分で1文字を表現)を使用する~
(Unicode で U+10000 ~ U+10FFFF の範囲のもの)~
D800-DBFF の範囲の1文字分と DC00-DFFF の範囲の1文字を組み合わせ、1024X1024=104万文字を表現~
~
|「𠮟」|~|~|~|
|Unicode| U+20B9F      |        ||
|UTF-8  | F0 A0 AE 0F  |perl/php|mysql では utf8mb4 のテーブルじゃないとダメ|
|UTF-16 | D842 DF9F    |java    ||
|HTML   | 𠮟/𠮟|        | unicode の数値そのまま |

- android などでフォントが対応していないと表示できない

** UTF-8 BOM [#e22b3bf5]
UTF-8 にはテキストファイルの先頭に3バイトのマーカーをつけて、そのファイルがUTF-8であることを示す。この3バイトを BOM と呼ぶ~

 EF BB BF

Excel では CSV ファイルを読み込むときは、BOM 付 UTF-8 のみ判定可能。~
その他の場合は SJIS とみなすため、文字化けする~
~
- 日本独自の文化だが、UTF-8(BOMあり) / UTF-8N(BOMなし) と表現する場合がある

** 環境依存文字 [#s95054ab]
Windows のみで表示されるもの(だった)~
?とか~
くさなぎの「なぎ」など~
?

** 環境依存文字(Unicode) [#k1bda7e1]
JIS2004 などで追加され、Unicode でのみ表現できるもの

** JIS2004 [#i6ae8a6c]
304 文字がサロゲートペアの範囲に~
その他が2バイトの範囲に!~
SJIS では表示できない~
|塡|(窒素充填の「てん」の旧字)|~|~|
|Unicode| U+5861       |        ||
|UTF-8  | E5 A1 A1     |perl/php||
|UTF-16 | D842 DF9F    |java    ||
|HTML   | 塡|        | unicode の数値そのまま |

** IVS [#fc69e3d4]
葛飾の「かつ」は葛城市の「かつ」と別の字形を使う~
渡邊 の「なベ」は17種類ある U+908A + (U+E0100 〜 U+E01xx)~
これを出し分ける際には Unicode で2文字分(=64bit!)つかう~
(まだ対応してるフォントは少ないので使えないけど)
|葛|~|
|Unicode| U+908A U+E0110      |
|UTF-8  |E9 82 8A F3 A0 84 80 |
|UTF-16 |908A DB40 DD00       |
 
** 結合文字 [#he890af1]
2文字以上の文字を重ね合わせて1文字として出す文字~
キモい顔文字で使われる~
か゚ とか~
U+304B U+309A
ま゚

** JAVA の文字コード [#y1c791ad]
ややこしいが、java で UTF-16 を使っているという意味は、内部処理で UTF-16を使っている(String) ということであり、.java 自体は UTF-8 で記述する(ことが多い)~
ちなみにファイルを扱う際には BOM を認識しないので、UTF-8(BOM付) のファイルの扱い時は注意すること~

* 参考文献 [#pb59d56d]
 http://itpro.nikkeibp.co.jp/article/COLUMN/20091209/341831/
 http://www.excite.co.jp/News/bit/E1351498844494.html