2015-06-14 53 views
3

我写了一个小的C程序: 为什么在使用GCC的终端中Unicode字符无法正确显示?

#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); 
} 

为什么没有这种打印字符

而是打印乱码。 unicodetest

我检查:

  • 没有尝试过的setlocale编译,相同的结果
  • 终端本身可打印字符,我可以将其复制并粘贴到从文本编辑器终端,它的Gnome在Ubuntu
  • GCC版本终端是4.8.2
+1

除了下面有关正确的'printf'格式说明符的答案,根据您的输出看来是正确的答案,您还应该确保您的源文件使用UTF-8编码而不是像ISO-8859-15那样。这种事情是为什么使用'L'\ u2510''而不是'L'┐''更好。 –

+0

使用正确的格式说明符,语言环境确实有所作为,没有它们,这些框字符就会回落到它们的ASCII等效字符,例如, '+','-'和'|'。 – Samik

回答

5

wprintf是一个版本的printf这需要广泛的字符串作为其格式字符串,但在其他方面表现得完全相同:%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); 
} 
相关问题