文字コードについて(主に https://ja.wikipedia.org/ に書いてあるものを抜粋)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% UNICODE %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
UNICODE : 符号化文字集合や文字符号化方式などを定めた文字コードの業界規格。
符号化方式には、UTF-7, UTF-8, UTF-16, UTF-32 などがある
-----------------------------------------------------------
UTF-16 について
1文字が、16ビットの符号単位が1つまたは2つで符号化される。
※1文字が、16ビットで表現される場合と、32ビットで表現される場合があり、
たいがいは16ビットに収まる。
(よく使われる文字は16ビットに変換されるようにコードを割り当ててある)
UTF-16の詳細
UTF-16BE : 16ビット整数をビッグエンディアンで直列化する。バイト順マーク(BOM)は使用不可。
UTF-16LE : 16ビット整数をリトルエンディアンで直列化する。バイト順マーク(BOM)は使用不可。
※Windows(intelアーキテクチャ)のUNICODEはこのUTF-16LEのようだ。
UTF-16 : バイト順はリトルエンディアンでもビッグエンディアンでもよい。BOMを使うことができる。
-----------------------------------------------------------
UTF-8 : 8ビット符号単位の文字符号化形式および文字符号化スキーム。
8ビット文字(英数字)が多い場合、ファイルサイズが小さくなる。
16ビット文字(漢字等)が多い場合、ファイルサイズが大きくなる傾向が出る。
---------------------
文字コードの例
---------------------
分かりにくいので、具体的に数値データで見てみる。
UNICODEは便宜上の文字コードで実際にデータとして記録される場合には、以下のように
UTF-16, UTF-8, S-JIS などのデータ列に変換されている。
このデータ変換の事を専門用語では「符号化」「エンコード」と言う。
A | UNICODE | U+0041 | 半角英字「A」 |
UTF-16 | 0x0041 |
UTF-8 | 0x41 |
S-JIS | 0x41 |
JIS213 | 1-3-33 |

あ | UNICODE | U+3042 | 全角ひらかな「あ」 |
UTF-16 | 0x3042 |
UTF-8 | 0xe38182 |
S-JIS | 0x820a |
JIS213 | 1-4-2 |

上 | UNICODE | U+4e0a | 全角漢字「上」 |
UTF-16 | 0x4e0a |
UTF-8 | e4b88a |
S-JIS | 0fe3 |
JIS213 | 1-30-69 |

凙 | UNICODE | U+51d9 | 全角漢字「凙」 |
UTF-16 | 0x51d9 |
UTF-8 | e58799 |
S-JIS | - |
JIS213 | - |

𨥆 | UNICODE | U+28946 | 全角漢字「𨥆」 |
UTF-16 | 0xd862 0xdd46 |
UTF-8 | 0xf0a8a586 |
S-JIS | - |
JIS X 0213 | 2-90-48 |

𨥫 | UNICODE | U+2896b | 全角漢字「𨥫」 |
UTF-16 | 0xd862 0xdd6b |
UTF-8 | f0a8a5ab |
S-JIS | - |
JIS X 0213 | 2-90-55 |
----------------
U+xxxx の表記について
「これはUNOCODEの文字コードです」という意味。コンピュータ内で「U+」という文字列を使うわけではなく
人が見て分かりやすいように「U+」という文字列を付けている。
----------------
BOMについて
http://maxy.osdn.jp/help/HTML/for_developers/unicode.html 「Maxyヘルプ」に非常に具体的な説明がある
具体的には、BOMのコードは U+feff
各規格毎に以下のようにエンコードされる
UTF-8 :ef bb bf
UTF-16(BE) :fe ff
UTF-16(LE) :ff fe
UTF-32(BE) :00 00 fe ff
UTF-32(LE) :ff fe 00 00
----------------
エンディアンについて具体例
データをコンピュータのメモリなどに記録する際に、上位バイトから並べるか、下位バイトから並べるかの違いがある。
305441741(10進数)という数値をコンピュータのメモリに書き込む場合−
305441741を16進数で表すと、1234abcd となる。これを1バイト毎に分割してメモリに書き込む
1バイト毎に分割すると、「12」「34」「ab」「cd」となる。
ビッグエンディアンの場合上位バイトから書き込む→ 12 34 ab cd という順に書き込まれる
リトルエンディアンの場合下位バイトから書き込む→ cd ab 34 12 という順に書き込まれる
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% EUC %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
EUC (Extended Unix Code)
UNIX上でよく使われる文字コードの符号化方式である。
2種類のフォーマットがあるが、主に使用されるのは、可変長コードであるEUC Packed Formatである。
日本語EUC
日本国の規格を応用したEUCである。
JIS X 0208ベース:一般に日本語EUCという場合こちらを指す。EUC-JPともいう。
G0 - ASCII
G1 - JIS X 0208
G2 - JIS X 0201 カタカナ
G3 - JIS X 0212 補助漢字
-----------------------------------------------------------------------
EUCの1バイトコード
0x00 - 0x1f, 0x7f : 制御コード
0x20 - 0x7e : ASCIIコード
EUCの2バイトコード(全角文字)のエリア(JIS X 0208の漢字エリア)
上位1バイト= 0xa1 - 0xfe
下位1バイト= 0xa1 - 0xfe
EUCの半角カタカナのエリアは2バイトコードで別にエリアを設けています
上位1バイト= 0x8e
下位1バイト= 0xa1 - 0xdf
※http://charset.7jp.net/euc.html より引用
-----------------------------------------------------------------------
0x08 : (BS) 制御コード
0x41 : A 半角のA
0x7a : z 半角のz
0xa1bb :○ 全角のまる
0xa4aa :お 全角の「お」
0xb0a1 :亜 全角漢字「亜」
0x8eb1 :ア 半角カタカナ「ア」
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% JIS X 0208 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
JIS X 0208 は、日本語表記、地名、人名などで用いられる6879図形文字を含む、主として情報交換用の
2バイト符号化文字集合を規定する日本工業規格である。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Shift-JIS(S-JIS) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Shift_JISは、現在多くのパソコン上のファイル内で日本語を表すために使われている文字コードである。
※本人コメント「現在」について
→少なくとも日本語MS-DOS,Windows98などはShift JISを使用していた。
WindowsXPでは内部的にUNICODEが使われるようになったが、ユーザレベルではShift JISを使用していた。
Windows98で作成したMP3のタグはShift JISで記録されている(はず)だが、これをそのまま
Windows8などに持ってくると日本語などが文字化けしていることがある。(どうなるかは音楽アプリに依存する)
Back