印刷UTF-8产生不同的输出

时间:2017-11-28 11:33:02

标签: c++ windows macos

目标是使用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和使用g++ test.c -o test的bash):

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=

为什么会这样?最重要的是:什么是独立于平台的解决方案?

1 个答案:

答案 0 :(得分:3)

有unicode文字可用于确保您的字符串被编码为UTF-8:

u8"my_string"

在Linux上,这些正常的字符串将是UTF-8。

在Windows上,它实际上取决于你的编码。 您还可以提供额外的编译器标志:/source-charset:utf-8

请注意,即使您的字符串在Windows上编码为UTF-8,cout,使用非unicode代码页打印到控制台也会导致输出错误。