gpt4 book ai didi

c++ - 在 std::string 中存储 unicode UTF-8 字符串

转载 作者:IT老高 更新时间:2023-10-28 23:11:09 42 4
gpt4 key购买 nike

回应中的讨论

Cross-platform strings (and Unicode) in C++

How to deal with Unicode strings in C/C++ in a cross-platform friendly way?

我正在尝试将 UTF-8 字符串分配给 Visual Studio 2010 环境中的 std::string 变量

std::string msg = "महसुस";

但是,当我查看字符串 View 调试器时,我只看到“?????”我将文件保存为 Unicode(带签名的 UTF-8)我正在使用字符集“使用 unicode 字符集”

“महसुस”是尼泊尔语,包含 5 个字符,占用 15 个字节。但是 Visual Studio 调试器显示 msg 大小为 5

我的问题是:

如何使用 std::string 只存储 utf-8 而无需对其进行操作

最佳答案

如果您使用的是 C++11,那么这很容易:

std::string msg = u8"महसुस";

但既然你不是,你可以使用转义序列,而不是依赖源文件的字符集来为你管理编码,这样你的代码更便携(以防你不小心将它保存为非 UTF8 格式) :

std::string msg = "\xE0\xA4\xAE\xE0\xA4\xB9\xE0\xA4\xB8\xE0\xA5\x81\xE0\xA4\xB8"; // "महसुस"

否则,您可以考虑在运行时进行转换:

std::string toUtf8(const std::wstring &str)
{
std::string ret;
int len = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), NULL, 0, NULL, NULL);
if (len > 0)
{
ret.resize(len);
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), &ret[0], len, NULL, NULL);
}
return ret;
}

std::string msg = toUtf8(L"महसुस");

关于c++ - 在 std::string 中存储 unicode UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23264818/

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