I18N : WindowsとLinuxでの文字処理の違い

メモです。あくまでも個人メモ。

Windows

現状市場に製品としてリリースされているWindowsはベースのキャラクターセットとしてはUNCODEを用い、標準のエンコードはUTF-16LE。基本的にはOSの標準APIレベルでI18N,M17Nに対応している。

また、過去互換性のためにDOS/OS2時代からあるCode Pageという仕組みを残していて、基本的なバイナリの仕組みとしては8bitASCII(これも矛盾があるなぁ)としつつ、各国の事情に合わせた多バイト文字コード/エンコード環境に対応させており、MSのドキュメントではOEMコードと呼ばれるものがそれ。日本語はCP932とされ、これはいわゆるシフトJISであるが、MS独自拡張の部分があるためIANAのコードではCP932はWINDOWS_31Jとされ、SHIFT_JISとは区別される。(参考:http://www.iana.org/assignments/character-sets)

OEMコードからUNICODE(UTF-16), その逆、UNICODEからその他エンコードへの変換については標準でAPIが用意されている。(参考:http://msdn.microsoft.com/ja-jp/library/cc422021.aspx )

Linux

Linux(カーネル)は基本的に8bitクリアなカーネルで、基本的にはASCIIが前提で、多バイト文字列は意識しない。国際化に関する仕組みは、大きく分けるとX11関連のライブラリ、とCライブラリレベルでの対応、つまりw_charとロケールに依存している。このため、既存プログラムの大幅な改造が必要なソフトウェアのw_char化は進んでおらず、基本的に8bitクリーンな多バイトを意識しないソフトウェアを改造無し、もしくは小改造で多バイト文字を使用できるように、過去はEUC-JP(日本の場合)、現在はUTF-8を標準的な文字コードとしている。(あくまでも日本の場合です。)

異なる文字コード間でのコード変換では、現在はiconvを使用するのが一般的。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください