我試圖unicode字符串從.NET到本地C++來轉換,這樣我可以把它們寫入到一個文本文件中。該過程將被顛倒過來,以便讀取文件中的文本並將其轉換爲受管unicode字符串。統一<->多字節轉換(Native對管理)
我使用下面的代碼:
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字符串.. 如何正確恢復日文字符?
不能從Unicode轉換爲UTF-8,因爲UTF-8是Unicode的已! – tchrist
語義。 Windows和.NET使用UTF-16作爲Unicode字符串的編碼。我相應地更改了我的答案中的註釋,但代碼保持不變。 –
Unicode標準實際上定義了這些條款。微軟不能自由地接受,擴展,修飾和消除公認的國際標準中爲其自身惡意目的而精心定義的術語。充其量,它傳播不準確和混亂。在中間,這是一個謊言。我不知道最糟糕的是什麼,因爲微軟夢寐以求的壟斷計劃遠遠超出了我自己的想象。這些詞有標準的含義;我強烈建議你使用它們。 – tchrist