ツール
参考サイト
- 文字コードの考え方から理解するUnicodeとUTF-8の違い
- 文字コード入門
- 本当は怖い文字コードの話
用語
文字コード
- 符号化文字集合(character set)と符号化方式(character encoding scheme)をまとめた概念
- UnicodeとUTF-8・UTF-16・UTF-32の違いとは
符号化文字集合(character set)
- Unicode, JIS, KS, ...
- 一つ一つの文字に、符号位置(コードポイント)と呼ばれる整数値をつけて管理
- Unicodeの"あ" -> U+3042
- JIS X 0208 の"あ" -> 4区2点
- 符号位置は符号空間の座標
- 群、面、区、点
符号化方式(Character Encoding Scheme, CES)
- 符号化文字集合で文字に対応づけた整数値を、コンピュータが利用できるデータ列(通常、バイト列)に変換し符号化(Encoding)する方式
- ShiftJIS, EUC-JP, ISO-2022-JP, UTF-8, UTF-16, ...
Unicode
- 世界中の文字を扱えるようにした符号化文字集合
- 基本多言語面(Basic Multilingual Plane: BMP)
UTF-8, UTF-16, UTF-32
- それぞれ、8bit, 16bit, 32bit 単位で符号化した符号化方式
- UTF-8
- 符号位置(コードポイント)によって長さが1~4bytesに変化する可変長の符号化方式
- ASCII(半角文字)にしか対応していないシステムでも、大きな変更なしに使える
- ファイルへの保存や通信に便利で、メモリ効率も高い
- 可変長のためにプログラムからの操作には不便
- UTF-16
- サロゲートペアを利用
- UTF-32
- サロゲートペアを使わずに固定長で表現する
ビッグエンディアンとリトルエンディアン
- http://www.torutk.com/projects/swe/wiki/ビッグエンディアンとリトルエンディアン
- リトル:かいバイトからさかさまに並べる方式
MSB/LSB (MostSignificant Bit/Least Significant Bit)
BOM(Byte Order Mark)
- テキストの先頭にて、どちらのエンディアンかを示すマーク
- ビッグ: FE FF, リトル: FF FE
Unicodeエスケープ
- なぜ?
- Php json_encode
- デフォルトでunicodeエスケープする
- JSON_UNESCAPED_UNICODEフラグで回避可能
書籍
- [改訂新版]プログラマのための文字コード技術入門