我正在尝试将来自 .NET 的 unicode 字符串转换为本机 C++,以便我可以将它们写入文本文件。然后该过程将被反转,以便读取文件中的文本并将其转换为托管的 unicode 字符串。
我使用以下代码:
String^ FromNativeToDotNet(std::string value)
{
// Convert an ASCII string to a Unicode String
std::wstring wstrTo;
wchar_t *wszTo = new wchar_t[lvalue.length() + 1];
wszTo[lvalue.size()] = L'\0';
MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, wszTo, (int)value.length());
wstrTo = wszTo;
delete[] wszTo;
return gcnew String(wstrTo.c_str());
}
std::string FromDotNetToNative(String^ value)
{
// Pass on changes to native part
pin_ptr<const wchar_t> wcValue = SafePtrToStringChars(value);
std::wstring wsValue( wcValue );
// Convert a Unicode string to an ASCII string
std::string strTo;
char *szTo = new char[wsValue.length() + 1];
szTo[wsValue.size()] = '\0';
WideCharToMultiByte(CP_UTF8, 0, wsValue.c_str(), -1, szTo, (int)wsValue.length(), NULL, NULL);
strTo = szTo;
delete[] szTo;
return strTo;
}
发生的情况是,例如一个日文字符被转换为两个 ASCII 字符(汉 ->“w)。我认为这是正确的?但另一种方式不起作用:当我调用 FromNativeToDotNet wizh "w 我只得到 "w 作为托管unicode 字符串...如何正确恢复日文字符?