簡體   English   中英

Unicode字符轉換為wstring

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM