我正在写一个小程序,它应该在屏幕上显示一个☻字符.该计划如下:
#includemain() { printf("?\n"); }
但是,当我运行这个程序时,我得到了输出
?ÿ?
为什么我得到这个输出,我该怎么做才能得到我想要的输出?
你得到的是因为你使用的终端程序与某些Unicode编码不兼容.
例如,我的Debian框编译得很好,它实际上打印出笑脸,因为gnome-terminal
是一个该死的精美软件:-)
你看到三个字符而不是一个字符的事实是一个相当好的迹象表明它正在输出UTF-8.事实上,如果我在Debian盒子上运行该程序并捕获二进制输出od -xcb
,我看到:
0000000 98e2 0abb 342 230 273 \n 342 230 273 012 0000004
显示它是以 UTF-8出现的,它只是gnome-terminal
足够聪明,可以将其转换回正确的字形.
这些字节转换为二进制,如下所示:
e2 98 bb 1110 0010 : 1001 1000 : 1011 1011
并且,在这里使用这个优秀的答案,声明开始的位模式10
是连续字节,我们可以解码它如下:
U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx 10yyyyxx 10xxxxxx e2 98 bb 1110 0010 : 1001 1000 : 1011 1011 yyyy yy yyxx xx xxxx
因此,代码点0010 0110 : 0011 1011
等于263b
完全没有重合的是黑色笑脸字符.
在修复Windows无法正确显示Unicode的问题方面,如您的评论所示:
我在Windows命令提示符下.我应该如何让cmd.exe与unicode一起使用?
您可能希望查看此问题,尤其是关于使用chcp
将代码页更改为65001(UTF-8)的答案.注意我没有测试过这个,我只提供它作为指针.