|
|||||||||
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 |A|||
|Д|~|~|~|
|Unicode|U+0414 |||
|UTF-8 |D0 94 |||
|UTF-16 |1404 |||
|HTML |Д|||
|「あ」|~|~|~|
|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
|
|||||||||