文字コードとは?エンコードとは?なぜ文字化けするのか?
文字コードが何なのか、エンコードは何なのか、何で文字化けするかはっきり分かっていませんでした。月刊DBマガジンの2010/JANの徹底研究に文字コードの内容が載せていて、とても分かりやすく説明してくれたので、勉強メモを書きます。
文字コードとは
文字コードは「文字集合」と「エンコード方式」の二つの概念があります。
文字集合(Character Set):表現したい文字の集まり
つまりどんな文字が使いたいかの集合体です。
英数字の他に、各国の文字や、機種固有文字が含まれています。
エンコード方式
コンピュータは数で処理を行っています。人間が分かりやすいように見た目だけが文字や記号に表示しているだけで、で実は裏で対応している数値があります。US-ASCII文字コード表によれば、英語の'A'の数値は0x41です。
どの文字がどのビット列に割り当てるのかを決めるのがエンコード方式です。エンコードとも読んでます。
ASCII - Wikipediaに詳細な文字コード表があります。0x41は16進の表示方法です。
代表的な文字集合とエンコード方式
文字集合 | 含まれる文字 |
---|---|
US-ASCII | 英数字、半角記号 |
ISO/IEC 646 | 英数字、半角記号 |
JIS X 0201 | 英数字、半角記号、半角カナ |
JIS X 0208 | 英数字、半角記号、半角カナ、平仮名、片仮名、第一水準漢字、第二水準漢字、全角記号 |
JIS X 0212 | JIS X 0208に加えて、補助感じ |
Unicode | 各言語文字 |
エンコード | 対象とする文字集合 |
---|---|
ISO-2022-JP | ASCII、JIS X 0201、JIS X 0208 |
Shift_JIS | ASCII、JIS X 0201、JIS X 0208 |
EUC-JP | ASCII、JIS X 0208、JIS X 0212 |
UTF-8 | Unicode |
ISO-2022-JPはE-Mail標準で、EUC-JPはUNIXプラットフォームで、Shift_JISはWindowsプラットフォームで、というようにそれぞれの特徴に対応した形で利用されています。
MS932は何?
厳密にいうとWindowsが扱う文字コードは、Shift_JISではなく、MS932です。または、Microsoftコードページ CP932ともいいます。MS932は、マイクロソフトがShift_JISを拡張して定義したコード体系です。Shift_JIS + 拡張した分 = MS932なので、範囲から言うとMS932 > Shift_JISです。
文字化け
Unicodeが現れる前の各エンコードは統一されていなかったため、同じ文字でも異なった数値(コード)になったり、同じ数値(コード)異なった文字になったりしました。これで他の文字コードに変更したときの数値の違いで文字化けになってしまったのです。Unicodeはその背景で誕生し、文字に対応する数値(コード)重複しないように、エンコードを決めました。
英数字がほぼ文字化けにならないのはASCIIがほぼすべてのエンコードに入っているから、そこは自然に統一された感じです。