Linux Install

Android

Linux Tools

Linux AV

Linux Memo

WINDOWS

PROGRAM

動画 Memo

音楽 Memo

モバイルアプリ Memo

FILE FORMAT

PROTOCOL

DEVICE

BookMark

その他


Unicode   

Unicode

文字集合(抽象的なもの) : 現在は 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

エンコーディング : Unicode をどう実装しているか



8/16/32 はビット処理の単位 = その単位で1文字を表す

1単位で足りない場合は2個セットで1文字、3個セットで1文字のように伸びる

UTF-32 の場合は Unicode 空間全てを表現できるので必ず1文字 32bit

(ただし a 等のどんなに簡単な文字でも必ず 32bitを使ってしまうため、同じテキストでも容量を食ってしまうという欠点がある)

基本的なもの

A
UnicodeU+0041
UTF-841
UTF-164100
HTML&#x0041
Д
UnicodeU+0414
UTF-8D0 94
UTF-161404
HTML&#x0414
「あ」
UnicodeU+3042
UTF-8E3 81 82perl/php
UTF-164230javabyteorder で 30 と 42 が逆
HTMLあunicode の数値そのまま

UTF-16 サロゲートペア

UTF-16に限り、16bit で足りないものはサロゲートペア(つまり2文字分で1文字を表現)を使用する

(Unicode で U+10000 ~ U+10FFFF の範囲のもの)

D800-DBFF の範囲の1文字分と DC00-DFFF の範囲の1文字を組み合わせ、1024X1024=104万文字を表現


「𠮟」
UnicodeU+20B9F
UTF-8F0 A0 AE 0Fperl/phpmysql では utf8mb4 のテーブルじゃないとダメ
UTF-16D842 DF9Fjava
HTML𠮟/𠮟unicode の数値そのまま
  • android などでフォントが対応していないと表示できない

UTF-8 BOM

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

EF BB BF

Excel では CSV ファイルを読み込むときは、BOM 付 UTF-8 のみ判定可能。

その他の場合は SJIS とみなすため、文字化けする


  • 日本独自の文化だが、UTF-8(BOMあり) / UTF-8N(BOMなし) と表現する場合がある

環境依存文字

Windows のみで表示されるもの(だった)

?とか

くさなぎの「なぎ」など

?

環境依存文字(Unicode)

JIS2004 などで追加され、Unicode でのみ表現できるもの

JIS2004

304 文字がサロゲートペアの範囲に

その他が2バイトの範囲に!

SJIS では表示できない

(窒素充填の「てん」の旧字)
UnicodeU+5861
UTF-8E5 A1 A1perl/php
UTF-16D842 DF9Fjava
HTML塡unicode の数値そのまま

IVS

葛飾の「かつ」は葛城市の「かつ」と別の字形を使う

渡邊 の「なベ」は17種類ある U+908A + (U+E0100 〜 U+E01xx)

これを出し分ける際には Unicode で2文字分(=64bit!)つかう

(まだ対応してるフォントは少ないので使えないけど)

UnicodeU+908A U+E0110
UTF-8E9 82 8A F3 A0 84 80
UTF-16908A DB40 DD00

結合文字

2文字以上の文字を重ね合わせて1文字として出す文字

キモい顔文字で使われる

か゚ とか

U+304B U+309A
ま゚

JAVA の文字コード

ややこしいが、java で UTF-16 を使っているという意味は、内部処理で UTF-16を使っている(String) ということであり、.java 自体は UTF-8 で記述する(ことが多い)

ちなみにファイルを扱う際には BOM を認識しないので、UTF-8(BOM付) のファイルの扱い時は注意すること

参考文献

http://itpro.nikkeibp.co.jp/article/COLUMN/20091209/341831/
http://www.excite.co.jp/News/bit/E1351498844494.html