我正在阅读网络上的一些文本,其中一些可能包含外语字符......通过 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 层,它返回 aconst char *
然后我将它传递到这里。它可以工作,但没有正确转换为 unicode。
----更新---- 这是基于汉斯建议的工作新代码:
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;