【发布时间】: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 等价物,例如
+、-和|。