Pri*_*rya 12 c++ windows unicode utf-8 stdstring
回应中的讨论
如何以跨平台友好的方式处理C/C++中的Unicode字符串?
我正在尝试将UTF-8字符串分配给环境中的std::string变量Visual Studio 2010
std::string msg = "?????";
但是,当我查看字符串视图调试器时,我只看到"?????" 我将文件保存为Unicode(带签名的UTF-8),我使用字符集"使用unicode字符集"
"महसुस"是一种尼泊尔语言,它包含5个字符,占用15个字节.但是visual studio调试器将msg大小显示为5
我的问题是:
如何使用std :: string只存储utf-8而不需要操作它?
Rem*_*eau 15
如果您使用的是C++ 11,那么这很容易:
std::string msg = u8"?????";
Run Code Online (Sandbox Code Playgroud)
但是,既然你不是,你可以使用转义序列,而不是依赖源文件的charset为你管理编码,这样你的代码就更容易移植(如果你不小心将它保存为非UTF8格式):
std::string msg = "\xE0\xA4\xAE\xE0\xA4\xB9\xE0\xA4\xB8\xE0\xA5\x81\xE0\xA4\xB8"; // "?????"
Run Code Online (Sandbox Code Playgroud)
否则,您可能会考虑在运行时进行转换:
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;
}
Run Code Online (Sandbox Code Playgroud)
std::string msg = toUtf8(L"?????");
Run Code Online (Sandbox Code Playgroud)