2008年02月17日

文字コード変換ライブラリ「ICU」での文字コード変換処理

UTF-8エンコーディングの文字が書かれているファイル("utf8_src.txt")を準備して、プログラムでファイルの1行目を読み込み、その文字列からUnicodeStringオブジェクトを構築してから、SJISにコード変換するサンプルです。

文字コード変換ライブラリ「ICU」セットアップ
が行われいることが前提です。


#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <string>
#include <fstream>


#include <unicode/unistr.h> // ICU


int main(int argc, char* argv[])
{
std::fstream r("utf8_src.txt");
std::string str;
r >> str;


//一旦Unicodeで文字列オブジェクトを構築して、extractメソッドで
//他のマルチバイト文字に変換します。


//Unicodeオブジェクト構築 例:"shift_jis"、 "utf8"、 "euc-jp"
icu::UnicodeString src(str.c_str(), "utf8");


//変換後の文字列長を取得
int32_t len = src.extract(0, src.length(), NULL, "shift_jis");


//変換後文字列の格納領域を準備
char* result = new char[len + 1];


//文字コード変換
src.extract(0, src.length(), result, "shift_jis");


//変換結果確認
printf("[%s]\n", result);


delete [] result;
return 0;
}


posted by 台北猫々 at 11:59| Comment(0) | TrackBack(0) | 技術メモ(Windows C/C++)

文字コード変換ライブラリ「ICU」セットアップ

VisualC++ 2005 ExpressEdition向けのセットアップ方法です。

1.IBM ICUのホームページ
http://www.icu-project.org/
↑のDownload ICUから辿っていき、「icu4c-3_8_1-Win32-msvc8.zip」をダウンロード
します。

2.「icu4c-3_8_1-Win32-msvc8.zip」を適当な場所に解凍します。ここでは、
"c:\\usr\local"に解凍することにします。

3.VC++のディレクトリ設定
[ツール]>[オプション]でオプションダイアログを起動し、
[プロジェクトおよびソリューション]>[VC++ディレクトリ]で、ICUのディレクトリを
設定します。

[インクルードファイル] → c:\\usr\local\include
[ライブラリファイル] → c:\\usr\local\lib

※この後は、UnicodeStringを使用してUTF8←→SJIS/EUC変換するだけのICU機能を使うための最低限の設定になります。

4.プロジェクトの設定
[プロジェクト]>[プロパティ]でプロパティダイアログを起動し、
[構成プロパティ]>[リンカ]>[入力]で、[追加の依存ファイル]に"icuuc.lib"を追記します。
#こんな感じになります。→ kernel32.lib $(NoInherit) icuuc.lib
#今回は文字コードの変換処理のみ使用するので"icuuc.lib"だけです。

5.DLLの配置
ソリューションで、exeファイルが生成されるディレクトリ(※1)に"icudt38.dll"と
"icuuc38.dll"をコピーします。
#今回は文字コードの変換処理のみ使用するので2つだけです。

(※1)例では〜\Visual Studio 2005\Projects\<ソリューションフォルダ>\debug もしくは、\releaseです。
posted by 台北猫々 at 10:23| Comment(0) | TrackBack(0) | 技術メモ(Windows C/C++)