トップページ > コンテンツ > プログラミング入門 > 言語共通系 > 文字コードについて

文字集合と符号化方式

文字集合文字符号化方式がややこしいのでメモ。
調査しながら記載しているので、たぶんどこか間違っている気はする。

文字集合 特徴
unicode 2byteで全世界の文字を表現。NTFSでもunicodeを利用して、ロングファイル名を表現している。
ascii 7bitで英数字と記号を表現。日本語は表現できない。
ほとんどのエンコード形式に含まれるため、英数字が文字化けすることは稀。
8.3形式ではasciiと拡張文字を利用して、ショートファイル名を表現している
拡張ascii asciiを拡張し、8bitで西欧の言語等も表現できるようにしたもの。ISO 8859として国際標準化されている。
JIS X 0201 英数字と日本語(半角かな)を含めた文字を表現。
JIS X 0208 日本語(漢字)も含めた文字を表現。
JIS X 0212 日本語(使用頻度の低い漢字)を含めた文字を表現。

文字符号化(エンコード)方式 特徴
utf-8 unicodeをエンコードする。英数字部分はasciiと同様のため、ascii互換があるらしい。
近年のlinux環境でも多く採用されている。
utf-8-mac iconvを行う際に、utf-8エンコード化とMac OSのファイルシステムHFS+に適合させるように変換する文字コード指定。
Mac OSはNFDで正規化するため、濁点等は結合文字列として扱われる。
utf-16 unicodeをエンコードする。文字コードの一部をサロゲートペアで表現する。
utf-32 unicodeをエンコードする。
Shift-JIS 英数字部分はasciiとJIS X 0201なのか若干不明瞭。JIS X 0201やJIS X 0208を含む。
CP932(MS932) MicrosoftがShift-JISを拡張して定義したもの。ANSIとも呼ばれる?
windowsの日本語環境の実現方法として利用される。
EUC-JP ascii、JIS X 0201、JIS X 0208、JIS X 0212を含む。
Unix環境で日本語を扱うことを可能にした。

  • BOM(byte order mark)
 符号化方式がリトルエンディアンビックエンディアンか分かるようにする方法。テキストの数バイトに特有のデータを付与する。
 エンコード方式の特性上影響を受けるutf-16等で採用されている。
 ソフトウェアによっては、BOMをデータ処理の参考にしているケースがあるので、
 迷ったらBOM有にしておいた方が無難。

文字コードのOS依存

 window環境かunix環境かで色々異なるので注意。

例1:改行コード

window CR+LF
mac CR
unix LF

例2:Unicode正規化

これを意識していないと濁点等の文字列を使う時にはまる。
例えば、mac OSで、ファイルシステムから取得する情報を利用するようなスクリプトを書く場合、
nkf --ic UTF-8-MAC等をかませて、NFD->NFCに変換してからでないと失敗したりする。
(nkfもデフォルトで入っていないので、homebrew等で導入する必要有)

windows NFC
mac NFD
unix NFC




最終更新:2019年05月03日 17:27