打印UTF-8会产生不同的输出[重复]
Posted
技术标签:
【中文标题】打印UTF-8会产生不同的输出[重复]【英文标题】:printing UTF-8 yields different output [duplicate] 【发布时间】:2018-05-11 20:22:57 【问题描述】:目标是使用 C++ 打印Uni Würzburg
我正在使用的代码:
#include <stdio.h>
using namespace std;
int main()
char str0[21] = "Uni Würzburg";
printf("%s\n", str0);
char str1[21] = 85,110,105,32,87,'\xc3','\xbc',114,122,98,117,114,103, 0;
printf("%s\n", str1);
char str2[20] = "Uni W\x81rzburg";
printf("%s\n", str2);
char str3[20] = 85,110,105,32,87,'\x81',114,122,98,117,114,103, 0;
printf("%s\n", str3);
return 0;
我通过创建"ü"
字符串并打印字符得到了\xc3bc
。
在两个不同的 Mac 上输出(同时使用 CLion 和在 bash 中使用 g++ test.c -o test
):
Uni Würzburg
Uni Würzburg
Uni W�rzburg
Uni W�rzburg
Windows 上的输出 (CLion):
Uni W├╝rzburg
Uni W├╝rzburg
Uni Würzburg
Uni Würzburg
CLion 编辑器和项目编码在所有情况下都设置为 UTF-8,而 bash 的语言环境是:
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=
为什么会这样?最重要的是:什么是独立于平台的解决方案?
【问题讨论】:
这是您要寻找的答案:***.com/a/402918/5470596 【参考方案1】:有 unicode 文字可用于确保您的字符串被编码为 UTF-8:
u8"my_string"
在 Linux 上,这些普通字符串已经是 UTF-8。
在 Windows 上,这实际上取决于您的代码。
您还可以提供额外的编译器标志:/source-charset:utf-8
请注意,即使您的字符串在 Windows 上被编码为 UTF-8、cout,使用非 unicode 代码页打印到控制台也会得到错误的输出。
【讨论】:
以上是关于打印UTF-8会产生不同的输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章