相关疑难解决方法(0)

UTF8到/来自STL中的宽字符转换

是否有可能以独立于平台的方式将std :: string中的UTF8字符串转换为std :: wstring,反之亦然?在Windows应用程序中,我将使用MultiByteToWideChar和WideCharToMultiByte.但是,代码是针对多个操作系统编译的,我仅限于标准C++库.

c++ unicode stl utf-8 character-encoding

69
推荐指数
6
解决办法
7万
查看次数

C++和Boost:编码/解码UTF-8

我正在尝试做一个非常简单的任务:获取一个unicode-aware wstring并将其转换为a string,编码为UTF8字节,然后采用相反的方式:获取string包含UTF8字节并将其转换为unicode-aware wstring.

问题是,我需要它跨平台,我需要它与Boost一起工作......而我似乎无法想办法让它工作.我一直在玩弄

试图将代码转换为使用stringstream/ wstringstream而不是任何文件,但似乎没有任何工作.

例如,在Python中它看起来像这样:

>>> u"????"
u'\u05e9\u05dc\u05d5\u05dd'
>>> u"????".encode("utf8")
'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'
>>> '\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'.decode("utf8")
u'\u05e9\u05dc\u05d5\u05dd'
Run Code Online (Sandbox Code Playgroud)

我最终追求的是:

wchar_t uchars[] = {0x5e9, 0x5dc, 0x5d5, 0x5dd, 0};
wstring ws(uchars);
string s = encode_utf8(ws); 
// s now holds "\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d"
wstring ws2 = decode_utf8(s);
// ws2 now holds {0x5e9, 0x5dc, 0x5d5, 0x5dd}
Run Code Online (Sandbox Code Playgroud)

我真的不想在ICU上添加另一种依赖关系......或者根据我的理解,应该可以使用Boost.

一些示例代码将非常感谢!谢谢

c++ unicode boost utf-8

21
推荐指数
3
解决办法
4万
查看次数

C++ - 将 wchar_t 转换为网络字节并返回

主要原因是因为我通过套接字发送 Unicode 数据(字节,而不是字符),并且我想确保字节序匹配,因为 wchar_t 是 UTF16。

接收程序也是我的另一个程序,所以我会知道它是 UTF16 并且能够做出相应的反应。

这是我目前的算法,这种算法有效,但结果很奇怪。(这是在同一个应用程序中,因为我想在发送之前学习如何转换它)

case WM_CREATE: {   


    //Convert String to NetworkByte
    wchar_t Data[] = L"This is a string";
    char* DataA = (char*)Data;
    unsigned short uData = htons((unsigned int)DataA);

    //Convert String to HostByte
    unsigned short hData = ntohs(uData);
    DataA = (char*)&hData;
    wchar_t* DataW = (wchar_t*)DataA;
    MessageBeep(0);


    break;
}
Run Code Online (Sandbox Code Playgroud)

结果:

??????????????????This is a string
Run Code Online (Sandbox Code Playgroud)

c++ tcp winsock2

3
推荐指数
1
解决办法
2216
查看次数

标签 统计

c++ ×3

unicode ×2

utf-8 ×2

boost ×1

character-encoding ×1

stl ×1

tcp ×1

winsock2 ×1