我正在尝试将包含一些重音字符的std::string
转换为std::wstring
,如C++ Convert string (or char*) to wstring (or wchar_t*)中所述,但我的程序抛出了错误的转换异常。
我使用的是Windows 10和MSVC 2022 v17.4.1,语言设置为C++17。
这是一个最小可重现的程序,演示了这个问题:
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
#pragma warning( disable : 4996 )
int main()
{
std::string s{ "hello ê world" };
try {
std::wstring ws = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(s);
std::wcout << ws << "\n";
}
catch (const std::exception& e) {
std::cout << e.what() << "\n";
}
}
非常感谢任何帮助将上述的 std::string
转换为 std::wstring
。
std::string s{ "hello ê world" };
*” 这不一定是以UTF-8编码的。 - Nicol Bolasstd::codecvt_utf8
在C++17中已被弃用。 - NathanOliverwxString
可以使用wxString::utf8_str()
转换为 UTF-8,然后可以用它来构造一个std::string
,因此你没有理由拥有一个对于std::wstring_convert
解码无效的std::string
。 - Remy Lebeau