文字コード体系まとめ
ASCII,ISO/IEC 646
- 7bit1バイトコード。
- 0x21-0x7e
- 各国ごとの文字を持つ
- 日本版は JIS X 0201 0x5c(yen)と0x7e(overline)がASCIIと違う
| 2 | 3 | 4 | 5 | 6 | 7 |
0 | SP | 0 | @ | P | ` | p |
1 | ! | 1 | A | Q | a | q |
2 | " | 2 | B | R | b | r |
3 | # | 3 | C | S | c | s |
4 | $ | 4 | D | T | d | t |
5 | % | 5 | E | U | e | u |
6 | & | 6 | F | V | f | v |
7 | ' | 7 | G | W | g | w |
8 | ( | 8 | H | X | h | x |
9 | ) | 9 | I | Y | i | y |
a | * | : | J | Z | j | z |
b | + | ; | K | [ | k | { |
c | , | < | L | \ | l | | |
d | - | = | M | ] | m | } |
e | . | > | N | ^ | n | ~ |
f | / | ? | O | _ | o | DEL |
ISO/IEC 2022
- 8bitへの拡張
- 0x21-0x7E(GL領域),0xa0-0xff(GR領域)へ7bitコードを呼び出して利用
- 呼び出しは固定あるいはエスケープシーケンスで切り替え
複数バイト対応とJISコード
- 0x21-0x7eの94を複数で表現。94区x94点=8836文字が基本
- JIS X 0208 JIS漢字 1,2水準 (6879文字) 一覧
- JIS X 0212 補助漢字。0208の追加 (SJISで使えない)一覧
- JIS X 0213 0208を含む3,4水準拡張 94x94x2面 1面(8797) 2面(2436)補助漢字との重複なし
1面
2面
符号化方式
- EUC-JP GLはASCII固定、GR領域にJIS X 0208 2バイト。半角カタカナ、0212拡張はシングルシフトで切り替え
- ISO-2022-JP 7bitGLのみ使用。エスケープシーケンスで切り替え。0208でも年度によってESCシーケンスが違う。
- Shift_JIS 1バイト目を0x80-9f,e0-efに圧縮。1バイト目0xf0以降は、CP932等のイリーガル部分。
- EUC-JIS-2004 JIS X 0213対応EUC。1面はGRにマップ。 2面をSS3(0x8f)で切り替え
- Shift_JIS-2004 JIS X 0213対応SJIS。1バイト目0xf0-fcまでを2面で利用。
ISO/IEC 8859
- GLはASCII, GRは各国対応文字
- Latin-1 はGRに西ヨーロッパ圏用を入れたもの
| a | b | c | d | e | f |
0 | NBSP | ° | À | Ð | à | ð |
1 | ¡ | ± | Á | Ñ | á | ñ |
2 | ¢ | ² | Â | Ò | â | ò |
3 | £ | ³ | Ã | Ó | ã | ó |
4 | ¤ | ´ | Ä | Ô | ä | ô |
5 | ¥ | µ | Å | Õ | å | õ |
6 | ¦ | ¶ | Æ | Ö | æ | ö |
7 | § | · | Ç | × | ç | ÷ |
8 | ¨ | ¸ | È | Ø | è | ø |
9 | © | ¹ | É | Ù | é | ù |
a | ª | º | Ê | Ú | ê | ú |
b | « | » | Ë | Û | ë | û |
c | ¬ | ¼ | Ì | Ü | ì | ü |
d | SHY | ½ | Í | Ý | í | ý |
e | ® | ¾ | Î | Þ | î | þ |
f | ¯ | ¿ | Ï | ß | ï | ÿ |
ISO/IEC 10646 / Unicode
- 国際符号化文字集合(UCS)
- 群(128)x面(256)x区(256)x点(256)の空間
- 群=面=0がBMP. 0群0f面までをUTF-16で表現
- U+0000-U+00ffまではLatin-1と同じ
- U+FF00-U+FF9Fまで互換用の全角英数と半角カナ
- U+E0100-U+E01EF 異体字セレクタ
- 02面にJIS X 0213の303文字あり
- unicode正規化によって、合成文字や互換漢字が変化するので注意
- JIS-unicode対応表
符号化方式
- UTF-16 BMPはそのまま2バイト。それ以外は0xd800-dbffと0xdc00-dfffに10bitづつ分割しサロゲートペアで表現。
- BOM U+0feff(ZERO WIDTH SPACE)を先頭において、エンディアンを検出
- UTF-8 1-4バイト可変。1バイトはASCII互換。2バイト以上の1バイト目は0xc0-0xf7、2バイト目以降は0x80-0xbf。冗長コードが作れるので注意。
WindowsJIS (CP932)
- ShiftJISコード体系の空いてるところに勝手に拡張(本来的な機種依存文字)
- NEC特殊文字(13区) + NEC選定IBM拡張文字(89~92区) + IBM拡張文字(115~119区)
- JIS X 0208とのダブり、JIS X 0213との不整合あり
- すべての拡張文字はUnicodeにはあるが、JIS X 0213に無い文字あり。(はしご高等)
- 13区の一部の記号(丸数字、ローマ数字等)はそのままJIS X 0213で採用
- 符号化方式はSJIS、EUCに変換可能
ハマリポイント
はしご高たつ崎問題
- 髙 U+9AD9 JIS X 0213には無し。CP932 SJISでは0xFBFCと0xEEE0の2つある
- 﨑 U+FA11 JIS X 0213 1-47-82。 CP932 SJISで0xFAB1 Shift_JIS-2004で0xED95
- phpでは、sjis-win指定でUTFとの相互変換可能
にょろ問題
- JIS 1-33をU+301c(〜)とU+ff5e(~)のどちらにマップするか
- 意味的には前者がただしいが、Windowsでは後者に変換される
- phpでは、sjis,euc-jp指定で前者、sjis-win,eucjp-winで後者に変換。
テスト用文字 𩸽(ホッケ)
- テストに最適な 𩸽(U+29E3D)。JIS X 0213,unicodeともに2面にあるので。
- JIS 2-93-44 , Shift_JIS-2004で fc 6b, UTF-8で f0 a9 b8 bd, UTF-16で d867+de3d
- これが扱えればJIS X 0213対応はバッチシ。MacOSXのテキストエディタは大丈夫よ。
- phpのmb_convert_encodingは残念ながら対応してない模様。もちろんUTFとしては扱える。