疑問解決(文字コード)

2013/4/1

わかりにくい文字コードについて解説します。

・概要

 コンピュータの内部では、文字も全て数値で持っています。
 たとえば、ASCII(American Standard Code for Information Interchange)コードでは、
 "A"は65 で、"a"は97で大文字小文字で番号は違います。
 "0"にも番号が割り当たっていて、48になります。(0ではないところが面白いですね)

 この割当番号が違う文字コードが世の中には多く存在するため、
 文字化け等の問題が発生します。

・文字集合と符号化方式
 文字コードには文字集合と符号化方式という概念があります。
 文字集合とは扱う事ができる文字の集まりのことです。
 そして符号化方式は、その文字に何番を割り当てるかと言うことになります。

 そしてそれぞれの規格が、文字集合を現したり、符号化方式を表したり、
 はたまた両方を含んでいたりするので、さらにややこしいです。
・様々な符号化方式
 アルファベットに関しては、ASCIIでほぼ統一されていると考えてよいと思います。
 厄介なのは、日本語です。
 下記の様に様々な符号化方式があります。
文 字集合 符 号化方式 概 要
JIS X 0208 ISO-2022-JP JISコードと呼ばれるものです。
E-メールに使われます。
EUC-JP(Extended Unix Code) Unixでよく使われます。
Shift_JIS シフトJISと呼ばれているものです。
Windowsに使われます。
・Unicode
 Unicode以前は、それぞれの言語によって文字集合が作られていました。
 そのため、日本語環境ではハングル等その他の言語を扱えませんでした。
 (アルファベットについては日本の文字集合の中に入っているため扱えます。)
 それを改善すべく、多言語を一つの文字集合として制定したのがUnicodeとなります。

 ただし元々は16ビットの文字集合を目指していましたが足りなくなったため、
 Unicode2.0にて21ビットの文字集合として規定されました。
 この元々の16ビットの領域をBMPと呼ぶ。
符号化方式
説明
UTF-7 UTF-16をBase64で変換して表す。
SMTP等7ビットしか利用できない場合に利用する。
現在では推奨されていない。
UTF-8 最大4オクテットで文字を表現します。
ASCIIの上位互換のため良く利用されます。
UTF-16,UTF-32との変換効率が良いです。
エンディアンをあらわすBOMは本来UTF-8には不要ですが、
U+FEFF(EF BB BF)が割り当てられています。

BOMありをUTF-8
BOMなしをUTF-8N
と使い分ける場合もあります。

Unicode
2進
1バイト目
2バイト目 3バイト目 4バイト目
0000
〜007F
0000 0000 0aaa bbbb 0aaa bbbb


0080
〜07FF
0000 0aaa bbbb cccc 110a aabb 10bb cccc

0800
〜FFFF
aaaa bbbb cccc dddd 1110 aaaa 10bb bbcc 10cc dddd
010000
〜1FFFFF
0000 0000 000a bbbb
cccc dddd eeee ffff
1111 0abb 10bb cccc 10dd ddee 10ee ffff
UTF-16 基本的には2バイトで表現しますが、表現できない文字に関しては
Shift-JISのように、4バイトを2バイトで表記する方法(ザロケートペア)を利用する方式
UTF-32 4オクテット固定長で表す方式
BOMも4バイトになっています。
・UCS
(Universalmultiple-octet coded Character Set)
(Universal Character Set coded in x octets)
(Universal Character Set)
(Universal coded Character Set)
 またUSCはISOとIECが共同で策定したためISO/IEC 10646とも呼ばれます。
方式
説 明
UCS-2 2オクテット固定のUCSです。
BMP以外の文字を使うことはできず、
2011年の改定で廃止予定となった。
UCS-4
4オクテットを基本とします。
Unicodeを31ビットに拡張したもので、0x10FFFFまで扱えます。
 文字符号化方式は下記のとおりです。
符 号化方式
説 明
UTF-1 8ビットコードによる方式
UTF-8にとって変わられました。
UTF-8
(UCS Transformation Format-8)
UnicodeのUTF-8同様最大4オクテット
UTF-16
(UCS Transformation Format-16)
UnicodeのUTF-16同様最大4オクテット
UTF-32 UnicodenoUTF-32と同様
・覚書
単 語 説 明
BOM
(Byte Order Mark)
バイト順がビックエンディアンかリトルエンディアンかを識別する ためのもの。
UTF-16の場合、BOMが”0xFF0xFE ”となっている場合
リトルエンディアンで UTF-16LE と呼び
”0xFE0xFF”の場合はビックエンディアンで UTF-16BE と呼びます。
IEC
(International Electrotechnical Commission)
国際電気標準会議のことです。 
BMP
(Basic Maltilingual Plane)
基本多言語面
ザロケートペア

 

さらに情報が欲しい方は、Google検索で  
Google
・TOPへ戻る

メールはこちらに