为什么我不能将带有破折号的字符串转换为 wstring?
Why cannot I convert a string with an en dash into a wstring?
以下代码失败,我似乎无法弄清楚原因。
std::string s = "–";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide = converter.from_bytes(s);
我尝试阅读有关 UTF-8 的内容,但我无法理解。将初始字符串存储为 wstring,将其转换为字符串,然后再将其转换回给出正确的结果。
std::wstring ws = L"–";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string narrow = converter.to_bytes(ws);
std::wstring wide = converter.from_bytes(narrow);
最有可能的是,您的 C++ 源文件未保存为 UTF-8,或者编译器未将其解释为 UTF-8,无论哪种方式都会导致 "–"
实际上不表示 U+2013 EN DASH
运行。您可以在运行时轻松验证这一点,例如使用调试器,或者只是打印出 string
.
的原始字节
确保您的 C++ 文件以 UTF-8 格式保存,并编译为 UTF-8。或者尝试使用此代码:
std::string s = u8"–";
或者:
std::string s = "\xE2\x80\x93";
以下代码失败,我似乎无法弄清楚原因。
std::string s = "–";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide = converter.from_bytes(s);
我尝试阅读有关 UTF-8 的内容,但我无法理解。将初始字符串存储为 wstring,将其转换为字符串,然后再将其转换回给出正确的结果。
std::wstring ws = L"–";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string narrow = converter.to_bytes(ws);
std::wstring wide = converter.from_bytes(narrow);
最有可能的是,您的 C++ 源文件未保存为 UTF-8,或者编译器未将其解释为 UTF-8,无论哪种方式都会导致 "–"
实际上不表示 U+2013 EN DASH
运行。您可以在运行时轻松验证这一点,例如使用调试器,或者只是打印出 string
.
确保您的 C++ 文件以 UTF-8 格式保存,并编译为 UTF-8。或者尝试使用此代码:
std::string s = u8"–";
或者:
std::string s = "\xE2\x80\x93";