【问题标题】:Why Unicode characters are not displayed properly in terminal with GCC?为什么 Unicode 字符无法在 GCC 终端中正确显示?
【发布时间】:2015-08-30 02:19:57
【问题描述】:

我写了一个小 C 程序:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main() {
    wprintf(L"%s\n", setlocale(LC_ALL, "C.UTF-8"));
    wchar_t chr = L'┐';
    wprintf(L"%c\n", chr);
}

为什么不打印字符

相反,它会打印乱码。

我已经检查过:

  • 尝试不使用 setlocale 进行编译,结果相同
  • 终端本身可以打印字符,我可以从文本编辑器将其复制粘贴到终端,它是 Ubuntu 上的 gnome-terminal
  • GCC 版本为 4.8.2

【问题讨论】:

  • 除了下面关于正确的printf 格式说明符的答案(根据您的输出似乎是正确的答案)之外,您还应该确保您的源文件使用 UTF-8 而不是而不是像 ISO-8859-15 这样的东西。这就是为什么最好使用L'\u2510' 而不是L'┐'
  • 使用正确的格式说明符,语言环境确实有所作为,没有它,这些框字符将回退到它们的 ASCII 等价物,例如+-|

标签: c gcc unicode


【解决方案1】:

wprintfprintf 的一个版本,它采用宽字符串作为其格式字符串,但其他方面的行为相同:%c 仍被视为char,而不是wchar_t。因此,您需要使用 %lc 来格式化宽字符。由于您的字符串是 ASCII,您不妨使用printf。例如:

int main() {
    printf("%s\n", setlocale(LC_ALL, "C.UTF-8"));
    wchar_t chr = L'┐';
    printf("%lc\n", chr);
}

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2019-09-21
    • 2013-06-05
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多