2010-11-24 6 views
2

私はWindows-1251エンコーディングで書かれたdllプロジェクトを持っており、私のDLLの出力はUTF-16でエンコードされている必要があります。私は、変換を行うには、次の機能を使用します。Win1251-> UTF16変換

ptr = MultiByteToWideChar(CP_ACP, 0, str, -1, wbuff.getBuffer(), len); 

は残念ながら、MultiByteToWideCharのは、ソースのエンコーディングにシステムロケールを使用しています。たとえば、私のWindowsのロケールが英語(米国)の場合、必要に応じてWin1251-> UTF8ではなくWin1252-> UTF8に変換されます。どちらか

は私が手動でロケールを設定しようとしましたが、次のコードは動作しません。

enc = setlocale(CL_ALL, "rus_rus.1251"); 
//this returns Windows-1251 encoding 
ptr = MultiByteToWideChar(CP_ACP, 0, str, -1, wbuff.getBuffer(), len); 

私は理解しているように、MultiByteToWideCharのはいつも私のsetlocaleの呼び出しを無視して、システムロケールを使用しています。

このような変換を行う他の方法はありますか?あるいは、私はこれらのロケール設定を正しく理解していないかもしれませんか?ありがとう。

P.S.私は文法の間違いで申し訳ありません。

答えて

10

setlocaleはCRT機能です。明らかにWindows APIは、それを介して設定されているものを気にしません。

CP_ACP(システムのデフォルトを意味する)ではなく、必要なコードページ(ご使用の場合は1251)を設定する必要があります。

res = MultiByteToWideChar(1251, 0, str, -1, wbuff.getBuffer(), len); 
関連する問題