C++ - 为什么 unicode 输出不正确?
C++ - Why isn't the unicode output correct?
我现在在C++中使用unicode工作了几天,这对我来说非常不清楚。我有几个关于它用法的问题,如果能得到回答,我会很高兴。目标很简单,输出是具有正确 unicode 的字符串。
据我了解,当炭被打破时被熄灭。就像您尝试将wchat_t投射到字符时一样。
关于我的机器操作系统:kubuntu 19.10
g++ --version
g++ (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1. 为什么这工作为 std::string 应该只能存储"é"不是的字符?
setlocale(LC_ALL, "en_US.utf8");
std::cout << "é" << std::endl;
output: é
2.打印wchar_t很奇怪。为什么以下输出是这样的?
setlocale(LC_ALL, "en_US.utf8");
wchar_t a = L'é';
std::cout << a << std::endl;
output: 233
setlocale(LC_ALL, "en_US.utf8");
wchar_t a = L'é';
std::wcout << a << std::endl;
output: �
setlocale(LC_ALL, "en_US.utf8");
wchar_t a = L'é';
printf("%lcn", a);
output: é
setlocale(LC_ALL, "en_US.utf8");
wchar_t a = L'é';
wprintf(L"%lcn", a);
output: é
PS:setlocale(LC_ALL,"en_US.utf8"(是这个来源所建议的。否则,std::wcout 将打印问号而不是正确的字符。
-
g++ 使用 UTF-8 作为其默认执行字符集。 您可以使用
-fexec-charset=
更改它,但这意味着您的第一个示例中的"é"是用 UTF-8 编码的。 -
2.a 没有
operator<<
参加ostream
和wchar_t
。 这意味着后者被提升并显示为数字(wchar_t
像char
是整数类型(。
另一个按预期工作。 我认为不需要更多的解释。 但需要注意的一件事是,需要正确配置您的环境。 这就是为什么我要求您在| od -t x1
中管道输出以检查输出是否为预期输出。 实际上,该问题是显示问题,如果仍然存在,则必须检查终端模拟器的配置。
相关文章:
- 不正确的比较和交换计数器输出用于快速排序功能
- Windows 10命令提示符的输出不正确
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- C++ - 为什么 unicode 输出不正确?
- 连接的组件程序产生不正确的输出
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 我的叉子输出不正确
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 当行数和列不匹配时,输出不正确
- 合并排序不正确的输出 c++
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 测试整数是否在范围内时,逻辑错误和不正确输出