C++で文字コード変換(プログラミングの技)

カスタム検索


C++で日本語文字コード変換(EUC/JIS/SHIFT-JIS/UTF-8などの相互変換)を行う方法だが、対応した公式ライブラリ等が存在しないため、自力で作らないといけないかと言うと、実はnkf32.dllというものがある。そしてこのnkf32.dllを使うのが一番手軽と思われる。


簡単にその手順を説明する。

(1).まずVectorのこちらからnkf32.dllを入手しよう。

(2).C++実行環境と同じフォルダにnkf32.dllをコピーする。

(3).後は普通にDLLの関数を呼び出すやり方で日本語文字コード変換(EUC/JIS/SHIFT-JIS/UTF-8などの相互変換)を行うことが出来る。

参考までにサンプルコードを次に記しておく。

★ まずh部かどこかでtypedefしておく
typedef BOOL (__stdcall *funcNkfConvertSafe)(LPSTR, DWORD, LPDWORD, LPCSTR, DWORD);
typedef int (__stdcall *funcSetNkfOption)(LPCSTR);

 
★ std::string型の自動変数l_StringUTF8にUTF-8文字列が格納済の時に、
★ 以下コードを実行すると、
★ TCHAR型のl_OutBuff[256]配列に、Shift-JISに変換された文字列が格納される。

DWORD l_CodeKind = 0;
HINSTANCE l_Hs = LoadLibrary("nkf32.dll");
funcSetNkfOption SetNkfOption = (funcSetNkfOption)GetProcAddress(l_Hs, "SetNkfOption");
l_Ret = SetNkfOption( "-W8sx" ); // UTF-8からShift-JISに変換オプション設定

funcNkfConvertSafe NkfConvertSafe = (funcNkfConvertSafe)GetProcAddress(l_Hs, "NkfConvertSafe");

DWORD l_bytesReturned = 0;
TCHAR l_OutBuff[256];
memset( &l_OutBuff[0], 0x00, sizeof( l_OutBuff ) );

l_Ret = NkfConvertSafe( &l_OutBuff[0], sizeof( l_OutBuff ), &l_bytesReturned, l_StringUTF8.c_str(), l_StringUTF8.length() );
::FreeLibrary( l_Hs );


最後にDLLやC++に対するお勧め書籍を挙げておこう。C++の奥の深さはC#やVBの比ではないのである。
Win32 APIシステムプログラミング with Visual C++ 2008独習C++STL標準講座―標準テンプレートライブラリを利用したC++プログラミング (Programmer’s SELECTION)



softinat製造所に戻る