【发布时间】:2017-05-14 06:33:26
【问题描述】:
当我在 Windows 控制台中输入“café”时,在宽字符串中我得到了“caf” 'c' 代码:99 'a' 代码:97 'f' 代码:102 '' code : 130 或其他奇怪的值与我在互联网上找到的东西,... 233 是正确的值,它是 'é' 的 UTF-8 代码
#undef UNICODE
#define UNICODE
wstring wstrCharsList;
std::getline(wcin, wstrCharsList);
if (!std::wcin.good()) cout << "problem !\n";
wcout << wstrCharsList << std::endl;
我尝试了我在其他 SO 问题和网络上找到的所有内容(尤其是:https://alfps.wordpress.com/2011/12/08/unicode-part-2-utf-8-stream-mode/),但没有任何效果。
我需要一个用 UTF8 编码的 wstring 来将它提供给我的 API 以执行一些字符串比较(使用从文本 UTF-8 编码文件加载的字符串。)
注意:在 Linux 上,我的程序可以正常运行。 FU 微软。
【问题讨论】:
-
I need a wstring encoded with UTF8什么?!您正在尝试将 UTF-8 字符存储在 wide 字符串中?这与它的用途完全相反——你需要一个用于 UTF-8 的常规 8 位字符串,句号。在任何平台上。 -
它允许我在字符占用超过一个字节的情况下进行比较...如果你能帮助我从控制台获得一个 UTF8 std::string 我会处理剩下的。
-
在 Linux 上,一切都适用于 UTF8。在 Windows 上使用“代码页 CP”。此 CP 是 UTF7 (ASCII),第 8 位用于 127 个额外字符,具体取决于您的系统配置。 Windows 内部使用 UTF16 表示(“宽字符”)。您需要寻找一些在这些不同表示之间进行转换的库。
-
问题只是控制台输入:(
-
使用
_setmode接收正确的std::wstring,然后将其与另一个std::wstring进行比较。请参阅此 SO 答案 stackoverflow.com/a/40417293/4603670 - 使用WideStringToMultibyte将 UTF16 转换为 UTF8(但我认为您在这里不需要)。请注意,Windows 控制台对某些亚洲语言的 Unicode 支持有限。
标签: c++ visual-c++ unicode utf-8 wstring