PortableEncodingConversion
提供:やる気向上作戦
目次 |
ワイド文字の内部表現
VC++において、wchar_tは16bit幅であり、内部的にはサロゲートなしのUTF16(UCS2)で表現されている。
対して、Linuxのglibcではwchar_tは32bit幅であり、UTF32で表現されていると思われる。
文字コード変換
Windowsにおいては、Win32 APIのMutiByteToWideChar / WideCharToMultiByteを用いて、 UTF8, UTF16, ANSIコードページ(日本語の場合CP932≒Shift JIS)を相互に変換することができる。 また、Internet Explorerに付属のmlang.dll を用いて変換を行うことも出来る(EncodingConversion 参照)。
Linuxにおいては、iconvを利用するのが一般的である。
UNICODEマッピングの相違
WindowsにおけるCP932<->UNICODEマッピングと、iconvのCP932<->UNICODEマッピングは細部において異なる。これは予期せぬ字形の変化につながるので、注意すべきである。
ポータブルな文字コード変換ライブラリ
- GNU libiconv
- LGPL
- IBM ICU
- Xライセンス
GNU libiconvあるいはICUを使うと、複数のプラットフォーム上で一貫性のある文字コード変換を行うことができる。libiconvのライセンスはLGPLであるため、ダイナミックリンクしない場合は組み込み先のソフトウェアにもソース公開義務が生じることに注意。ICUは、libiconvよりも緩やかなライセンスである。