gpt4 book ai didi

C++ & boost : encode/decode UTF-8

转载 作者:IT老高 更新时间:2023-10-28 21:44:27 36 4
gpt4 key购买 nike

我正在尝试做一个非常简单的任务:获取 unicode-aware wstring 并将其转换为 string,编码为 UTF8 字节,然后反之解决方法:获取一个包含 UTF8 字节的 string 并将其转换为可识别 unicode 的 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'

我最终想要的是:

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}

我真的不想再增加对 ICU 的依赖或具有这种 spirit 的东西......但据我了解,Boost 应该是可能的。

我们将不胜感激一些示例代码!谢谢

最佳答案

谢谢大家,但最终我还是求助于 http://utfcpp.sourceforge.net/ -- 它是一个非常轻量级且易于使用的仅标题库。我在这里分享一个演示代码,如果有人觉得它有用的话:

inline void decode_utf8(const std::string& bytes, std::wstring& wstr)
{
utf8::utf8to32(bytes.begin(), bytes.end(), std::back_inserter(wstr));
}
inline void encode_utf8(const std::wstring& wstr, std::string& bytes)
{
utf8::utf32to8(wstr.begin(), wstr.end(), std::back_inserter(bytes));
}

用法:

wstring ws(L"\u05e9\u05dc\u05d5\u05dd");
string s;
encode_utf8(ws, s);

关于C++ & boost : encode/decode UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6140223/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com