[英]Unicode char to wstring
我正在嘗試將C#字符串發送到C ++ wstring數據,反之亦然。 (通過TCP)。
我成功地從C#發送了字符串數據(作為Unicode,UTF-16),並通過char數組將其放入C ++。
但是我不知道如何將char數組轉換為wstring。
這是C ++用utf-16獲取“ abcd”時的樣子
[0] 97 'a' char
[1] 0 '\0' char
[2] 98 'b' char
[3] 0 '\0' char
[4] 99 'c' char
[5] 0 '\0' char
[6] 100 'd' char
[7] 0 '\0' char
這是C ++用utf-16取“한글”時的樣子
[0] 92 '\\' char
[1] -43 '?' char
[2] 0 '\0' char
[3] -82 '?' char
這就是c ++用utf-16獲取“日本語”時的樣子
[0] -27 '?' char
[1] 101 'e' char
[2] 44 ',' char
[3] 103 'g' char
[4] -98 '?' char
[5] -118 '?'char
由於UTF-8不支持所有日語字符,因此我嘗試通過UTF-16(基本上使用C#字符串)獲取數據。 但是我無法通過使用發現的每種方法將這些char數組轉換為wstring。
這是我以前嘗試過的
std::wstring_convert<std::codecvt_utf16<wchar_t>> myconv
-> what wchar have to have
[0] 54620 '한' wchar_t
[1] 44544 '글' wchar_t
->What it have after using this
[0] 23765 '峕' wchar_t
[1] 174 '®' wchar_t
/
std::wstring wsTmp(s.begin(), s.end());
-> what wchar have to have
[0] 54620 '한' wchar_t
[1] 44544 '글' wchar_t
->What it have after using this
[0] 92 '\\' wchar_t
[1] 65493 'ᅰ' wchar_t
[2] 0 '\0' wchar_t
[3] 65454 'ᆴ' wchar_t
在他們兩個人中,我都將char數組更改為字符串,然后將其更改為wstring,但是失敗了……
有誰知道如何將非英語UTF-16字符數據轉換為wstring數據?
添加:C#邊碼
byte[] sendBuffer = Encoding.Unicode.GetBytes(Console.ReadLine());
clientSocket.Send(sendBuffer);
然后將“한글”轉換為字節
[0] 92 byte
[1] 213 byte
[2] 0 byte
[3] 174 byte
我嘗試將C#字符串數據發送到C ++ wstring數據,反之亦然。 (通過TCP)
我成功地從C#發送了字符串數據(如Unicode,UTF-16),並通過char數組在C ++中獲得了它。
使用UTF-8而不是UTF-16傳輸數據會更好,更便於攜帶。
但是我不知道如何將char數組轉換為wstring。
在wchar_t
是16位的平台上,例如Windows(我假設您使用的是C#),您可以按原樣直接將char
數組內容復制到std::wstring
,例如:
char *buffer = ...;
int buflen = ...;
std::wstring wstr(reinterpret_cast<wchar_t*>(buffer), buflen / sizeof(wchar_t));
如果您需要支持wchar_t
是32位的平台,則可以使用std::wstring_convert
:
char *buffer = ...;
int buflen = ...;
std::wstring_convert<std::codecvt_utf16<wchar_t>, wchar_t> conv;
std::wstring wstr = conv.from_bytes(std::string(buffer, buflen));
// or:
// std::wstring wstr = conv.from_bytes(buffer, buffer+buflen);
由於wchar_t
不太便於移植,請考慮改用std::u16string
/ char16_t
(如果使用的是支持C ++ 11或更高版本的編譯器),因為它們是專為UTF-16數據設計的。
由於UTF-8不支持所有日語字符
是的,它確實。 Unicode是實際的字符集,UTF只是用於將Unicode代碼點表示為字節序列的編碼。 所有 UTF(UTF-7,UTF-8,UTF-16和UTF-32)都支持整個 Unicode字符集,並且UTF旨在實現從一種UTF到另一種UTF的無損轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.