文字コードは以下の2段階に区別されます。
- 符号化文字集合(Coded Character Set)
- 文字符号化方式(Character Encoding Scheme)
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|
符号化文字集合 Coded Character Set
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0− | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1− | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2− | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3− | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4− | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5− | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6− | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7− | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
上記の「文字 "!"」は「コード "0x21 (16 進数の 21)"」であることがわかります。
符号化文字集合は、対応表が持つ文字の種類によって、以下の種類が存在します。
- ASCII(アルファベットや数字等を集めた対応表)
- JIS X(日本語で利用する文字を集めた対応表)
- Unicode(全世界のすべての文字や記号等を集めた対応表)
なお、同じコードでも符号化文字集合の種類によって、割り当てる文字が異なる場合があります。
- ASCII のコード 0x5c = バックスラッシュ ('\')
- JIS X 0201 のコード 0x5c = 円記号 ('¥')
そのため、利用する符号化文字集合によって表示する文字が変化します。
以前は、国ごとに符号化文字集合を変更することで表現できる文字を切り替えていましたが、上記のような問題が発生し、とても不便でした。
そこで、全世界のすべての文字を対応表に詰め込んだ Unicode と呼ばれる符号化文字集合が作成されました。
ASCII コード一覧
ASCII コードの一覧を以下の順で記載したものを掲載します。
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0− | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
1− | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2− | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3− | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4− | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5− | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6− | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7− | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
初めの32文字と最後の1文字は制御文字と呼ばれており、各制御文字の説明は以下のwiki に載っています。
JIS X 0201 コード一覧
JIS X 0201 コードの一覧は以下の wiki に記載があります。
Unicode コード一覧
Unicode コードの一覧は以下の wiki に記載があります。
文字符号化方式 Character Encoding Scheme
文字符号化方式の一例は以下のとおりです。
文字符号化方式 | 利用する符号化文字集合 | 説明 |
---|---|---|
Shift-JIS | JIS X 0201、 JIS X 2008 | Windows では、日本語を表現するときに Shift-JIS の拡張版を用いる |
EUC-JP | JIS X 0208、JIS X 0212 | UNIX 等で、日本語を表現するときに用いる |
UTF-8 | Unicode, ISO/IEC 10646 | 現在の主流 |
なし | ASCII, ISO-8859, JIS X 0201 | コードと Byte 列が同じため、 対応表でエンコードする必要がない |
文字符号化方式は、複数の符号化文字集合を組み合わせて、利用可能な文字数を増やせます。
例えば、Shift-JIS では「JIS X 0201」と「JIS X 0208」を組み合わせて、ASCII と互換性を持たせつつ、漢字の表現も可能としています。
符号化文字集合 | 説明 |
---|---|
JIS X 0201 | 1 バイト (= 256) の符号化文字集合(ASCIIとの互換のため) 256 通りしか文字を表現できないので、漢字を表現するには組み合わせが不足 |
JIS X 0208 | 2 バイト (= 65, 536) の符号化文字集合 65,536 通りの文字を表現できるため、多くの漢字をコードに割り当て可能 |
Shift-JIS 文字コード一覧
EUC-JP 文字コード一覧
UTF-8 文字コード一覧
文字のエンコード
「符号化文字集合に Unicode」、「文字符号化方式に UTF-8」を利用してエンコードしてみます。
文字 | コード(Unicode) | バイト列(UTF-8) |
---|---|---|
あ | U+3042 | b'\xe3\x81\x82' |
い | U+3044 | b'\xe3\x81\x84' |
う | U+3046 | b'\xe3\x81\x86' |
え | U+3048 | b'\xe3\x81\x88' |
お | U+304A | b'\xe3\x81\x8a' |
Unicode で文字からコードへ
検証には python 3.6.8 を利用します。
Python 3.6.8 (default, Aug 10 2019, 06:54:07)
b'\\u3042'
以下のリンクから、Unicode U+3042 は "あ" であることがわかります。
UTF-8 でコードからバイト列へ
b'\xe3\x81\x82'
以下のリンクから、UTF-8 の3バイトのバイト列(e3 81 82)は "あ" であることがわかります。
文字コードの確認、変換ツール
文字コード確認、変換には、nkf コマンドを使いましょう。
nkf コマンドのインストール
nkf コマンドの使い方
文字コードを確認 -g
#結果 UTF-8
ただし、後述するように判定が甘い場合もあるので注意してください。
文字コードを変換 {-s, -e, -w} --overwrite
#結果 Shift_JIS
文字コードに対応するオプションは以下のとおりです。
文字コード | オプション |
---|---|
Shift-JIS | -s |
EUC-JP | -e |
UTF8 | -w(BOM成し),-w8(BOMあり) |
UTF-16 | -w16(BOM無し),-w16B(BOMあり) |
文字コードの判定がガバいんだけど?
確実な確認方法は無いらしい。
テキストファイルには文字コードを判別する仕組みがない(BOMを除く)。
「XXというバイトは、文字コードYYYにしか出現しないから、文字コードはYYYだ!」という判別方法。
文字列が短いと判別に失敗しやすい。
自動判別は確実ではない
https://qiita.com/yuji38kwmt/items/b3a7820b4d3b544da4ff#%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%87%AA%E5%8B%95%E5%88%A4%E5%88%A5
バイナリを文字として表示したい
od コマンドを使いましょう。
BINARY
od -a <ファイルパス> で、バイナリを文字で確認します。
0000000 nul nul nul soh nul nul nul nul nul nul nul nul nul nul nul nul 0000020 M y S Q L sp 5 . 7 . 2 4 nul nul nul nul (省略)
"MySQL 5.7.24" と記録されていることが確認できます。
関連情報
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|