【技术帖】教你如何让Windows的命令提示符或PowerShell正常显示UTF-8字符
本帖最后由 acmilan 于 2014-1-2 11:02 编辑

如今软件日益国际化的今天,Windows下的命令行却还顽固地使用本地编码来显示数据,这导致用UTF-8编码的文件在命令行显示乱码。虽说Cygwin的内核cygwin1.dll有自动转换功能,可是因为GB2312中没有变音符号等特殊字符,某些字符仍然不能正常显示。
虽然控制面板可以改控制台编码,可是你会发现并没有UTF-8。其实Windows是支持UTF-8控制台的,只是把它藏起来了。
第一步,打开开始->所有程序->右击附件->选择资源管理器【Windows8/8.1请打开开始屏幕,右击命令提示符,选择打开文件位置】,然后复制一份快捷方式,名字随便取。
1.PNG

第二步,双击那个快捷方式,打开“命令提示符”窗口。接下来我们要了解一个东西:代码页(codepage)。
什么是代码页呢?在很久以前,Windows NT出现了(Windows NT就是Windows XP和Windows 7的老祖宗),为了确保不同语言间的兼容性,它使用Unicode存储字符串(Unicode就是万国码,你可以认为它可以编码世界上所有的文字),可是当时大量程序使用本地编码(例如大陆的GB2312编码简体中文(GBK可以使用繁体),台湾的Big5编码繁体中文(其实也可以简体),美国的ISO8859-1只能编码英文和有限的欧洲文字),这样为了兼容性它也支持本地编码,但是系统内核是需要Unicode的,所以就发明了“代码页”这个中介,用来转换本地编码和Unicode。
“代码页”使用一个数字来编号转换表,例如437就是美国英语(ISO8859-1),936就是简体中文(GBK),950就是繁体中文(Big5)。而65001就是UTF-8了。
命令提示符也使用代码页进行转换,而我们要做的就是将代码页改成65001(就是UTF-8了)。

怎么做呢?
首先help一下,发现chcp命令可以改变代码页
2.PNG
3.PNG
(图片待会上传)

于是乎第三步,敲下chcp 65001后窗口变成这般模样:
4.PNG


一切正常?转到带有中文的文件夹下敲下dir
5.PNG


怎么回事呢?最初我也不清楚,于是百度了一下,原来是“点阵字体”惹的祸,在这里更改:
第四步,点击窗口左上角图标,在弹出菜单中选择“属性”
6.PNG

选择Consolas或Lucida Console

切到【选项】选项卡,发现代码页已更改
buc.PNG


第五步,单击“确定”保存设置,就OK啦!
7.PNG


要注意必须进行第四步和第五步,即使不更改字体,因为这样可以保存“代码页”的设置。不这样的话下次“代码页”仍然是936。

这样设置以后很多欧洲语言就可以显示了。组合变音符号(不是固有变音符号)会显示为单一的字符,因为要保证等宽。

PowerShell如法炮制即可。
来自 科创茶话
2014-1-2 10:48:53
acmilan(作者)
1楼
本帖最后由 acmilan 于 2014-1-2 10:59 编辑

效果图,使用相同字体,经过设置后可以正确显示UTF-8字符
设置前:
result2.PNG

设置后:
result.PNG
折叠评论
加载评论中,请稍候...
折叠评论
2楼
[s:125]学习了.就喜欢有内容的帖子。
折叠评论
加载评论中,请稍候...
折叠评论
3楼
学习了,谢谢分享
折叠评论
加载评论中,请稍候...
折叠评论
4楼
学习了
折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
ID:{{user.uid}}
{{user.username}}
{{user.info.certsName}}
{{user.description}}
{{format("YYYY/MM/DD", user.toc)}}注册,{{fromNow(user.tlv)}}活动
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png