私はネット全体からいくつかのテキストを読んでいますが、その一部には外国語の文字が含まれている可能性があります... C ++ / CLIを介して読み込んでおり、文字列をマネージドに変換したくありませString^
んが、問題が発生しているようです. これが私が使用しているコードスニペットです
String^ NativeToCliString(const char * nString) {
String^ converted; // = gcnew String("");
if (nString != NULL)
{
converted = (gcnew marshal_context())->marshal_as<String^>(nString);
}
return converted;
}
関数はエラーをスローしませんが、コードを Windows フォームに出力すると、ランダムな (ASCII) 文字が表示されます...
私が使用する JNI メソッドはかなり単純です....必要に応じて、そのコードも投稿できます。基本的に、Java レイヤーを呼び出して a を返し、const char *
それをここに渡します。動作しますが、正しくユニコードに変換されません。
---- 更新 ---- Hans の提案に基づいた新しい作業コードは次のとおりです。
int bufSize = MultiByteToWideChar(CP_UTF8, 0 , raw , -1, NULL , 0 );
wchar_t* wstr = new wchar_t[bufSize];
MultiByteToWideChar( CP_UTF8 , 0 , raw , -1, wstr , bufSize );
String^ val = gcnew String(wstr);
delete[] wstr;