如何让PowerShell显示中文不乱码

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

第二步,双击那个快捷方式,打开“命令提示符”窗口。接下来我们要了解一个东西:代码页(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命令可以改变代码页
209933
209934
(图片待会上传)

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


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


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

选择Consolas或Lucida Console

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


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


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

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

PowerShell如法炮制即可。







解决方法:

其实嘛一看就知道是encoding的问题,英语为默认语言的环境里,PowerShell默认的Encoding是AscII

最简单的方法就是改用PowerShell ISE,它可以显示非英语字符。在操作SharePoint数据的时候只要在启动ISE的时候运行一下下面的语句就可以,相比于Management Console方便很多。

Add-PSSnapin Microsoft.SharePoint.PowerShell

 

另外一个解决方法是把Encoding改为UTF8,运行下面的语句就可以了。

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding

 


中文环境Powershell管道传递中文参数???乱 不能上传图片(为灰色),我就把运行的结果粘贴上来,是以管理员身份运行的,环境也是中文,英文的用户名是可以的,中文的用户就错误了,用户名CN=???,组织单位OU=???,用户名和组织单位都是中文的,管道传递后就变乱了,直接运行命令dsquery user -limit 0 "dc=domain,dc=com"是可以正常列出所有的域用户的,以管道传递过去后中文就乱了,另外,同样的命令以批处理方式运行不出错,现在暂时是以批处理方式来运行了,但是Powershell比批处理更为强大,现在是能用Powershell的就尽量用Powershell了,所以也要知道为什么会出现乱,避免下次再出现类似问题。 ``` Windows PowerShell 版权所有 (C) 2016 Microsoft Corporation。保留所有权利。 PS C:\Users\Administrator> $host Name : ConsoleHost Version : 5.1.14393.1066 InstanceId : aea4c557-15c0-45f8-9380-a17117d3af5b UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : zh-CN CurrentUICulture : zh-CN PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace PS C:\Users\Administrator> chcp 活动代页: 936 PS C:\Users\Administrator> dsquery user -limit 0 "dc=,dc=com" | dsmod user -pwdneverexpires yes dsmod 成功:CN=Administrator,CN=Users,DC=domain,DC=com dsmod 成功:CN=Guest,CN=Users,DC=domain,DC=com dsmod 成功:CN=DefaultAccount,CN=Users,DC=domain,DC=com dsmod 成功:CN=krbtgt,CN=Users,DC=domain,DC=com dsmod 失败:CN=???,OU=???,DC=domain,DC=com:找不到目录对象。 键入 dsmod /? 以获取帮助。 PS C:\Users\Administrator> ```
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页