首页 > 系统相关 >Windows Wowershell 和CMD显示中文乱码的真实原因和解决方法(转)

Windows Wowershell 和CMD显示中文乱码的真实原因和解决方法(转)

时间:2024-03-19 17:14:18浏览次数:33  
标签:编码 UTF Windows 乱码 BOM Unicode Wowershell PowerShell

原文:https://blog.csdn.net/Curious_r/article/details/124540193

作者:Curious_r

中文互联网上一般搜素到的解决方案都是切换编码页。

但编码页不是Winodws PowerShell对中文字符乱码的真正原因。因为编码页只是针对不支持Unicode的程序采用的默认编码,按理说你的UTF8脚本不应该会采用这个编码页来读取。

实际问题出在Winodws PowerShell对UTF8的判断上,UTF-8标准形式是不带BOM的,但Windows下要带,Windows默认使用BOM来区分Unicode和非Unicode编码,对非Unicode就会使用程序指定的ANSI编码页来解读,而Unicode则会使用另一套称为宽字符的方法。程序的ANSI编码页一般都是默认跟随系统的缺省编码页,你安装系统的语言区域默认的版本。这一套全球语言支持的方法在今天看起来是造成了很多不必要问题,但它成型太早了,那个时候很多相关的讨论还没有结果。

所以WinPS和CMD对UTF8文件的中文乱码,是因为它没有正确的识别这是一个UNICODE编码文件。如果你把脚本重新保存为带BOM的UTF8编码,脚本里的中文就能正确ECHO了。具体查看参考文档。

请注意高于6.0版本的PowerShell没这个问题,已经和主流处理方式保持一致了。无奈的是系统内置的还是不再更新的Windows PowerShell 5.1

当然,切换本机编码页为UTF-8(实验性的)也可以解决这个问题,但如前文所说,这意味着放弃很多采用过时技术的软件的兼容性,除非你已经摆脱了那些不再更新的软件遗产,不然请谨慎考虑。或者,像随处可见的答案那样,为你的PowerShell指定编码页也可以——假如只有你自己用这些脚本的话。我们没办法保证别人的WinPS也采取了一样的配置。

因此,我建议读者Winodws PowerShell脚本使用UTF-8 BOM保存,而不是GB18030之类的兼容本地代码页的编码。原因是虽然PowerShell能正确识别本地代码页,但很多常用的代码编辑器打开脚本这类文件时却不能默认识别出来。所以还是用两者都能正确识别的UTF-8 BOM来编写你的WinPS脚本吧

这同样不会毫无风险,假如你的脚本上传到一些Web环境中,在那里不带BOM的UTF-8是绝对标准。比如GitHub,带BOM的UTF-8文件会被解读为开头有一个奇怪的字符(变为可见)的UTF-8文档,虽然文本都能正常显示,但假如你在网页上直接编辑这些文件,并且不能像笔者一样熟谙编码的细节(笑

标签:编码,UTF,Windows,乱码,BOM,Unicode,Wowershell,PowerShell
From: https://www.cnblogs.com/ABuSiDeLuoYin/p/18083425

相关文章

  • 020_Windows快速搭建FTP服务器
    目录搭建FTP服务器,匿名访问安装FTP服务添加FTP站点测试本机上传下载测试上传下载局域网上传下载测试测试网络关闭防火墙上传浏览器测试搭建FTP服务器,用户访问安装FTP服务创建登录FTP服务器的用户名和密码添加FTP站点测试FTP服务ftp客户端工具配置FTP防火墙入站规则搭建FTP服务器......
  • exe添加为windows 服务
    需求:需要设置exe程序为开机启动,并且希望不是DOS窗口(容易误关,导致服务停止)这里需要借助一个开源软件:WinSW下载地址:https://github.com/winsw/winsw/releases 以x64机器为例,需要下载x64的安装包和一个必要的配置文件将这两文件放到和需要开机启动的exe相同的目录下,确保winsw.......
  • windows11安装SQL server数据库报错等待数据库引擎恢复句柄失败(二)
    windows11安装SQLserver数据库报错等待数据库引擎恢复句柄失败(二),昨天在给网友远程的时候发现了一个新的问题。计算机系统同样是Windows11,通过命令查出来的扇区相关结果也都是4096,但是最后的安装还是提示SQLserver数据库报错等待数据库引擎恢复句柄失败扇区修改详情可以......
  • Windows Server 2019上离线安装.NET Framework 3.5
    1、打开服务器管理器首先,下载sxs文件。然后打开服务器管理器,点击左侧的“仪表盘”,如下图所示。https://chaonb.lanzouw.com/ifOU01rvm7gf密码:666 2、添加角色和功能点击上图中的“添加角色和功能”,弹出下图所示“添加角色和功能向导”。3、选择安装功能一直点击“下......
  • PVS‑Studio 7.29 for macOS, Linux & Windows - 代码质量安全静态分析
    PVS‑Studio7.29formacOS,Linux&Windows-代码质量安全静态分析PVS‑Studio-代码漏洞扫描工具|静态代码测试|代码安全分析请访问原文链接:https://sysin.org/blog/pvs-studio/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgC、C++、C#和Java代码静......
  • 无法启动windows时间服务解决方法
    打开“服务”窗口,找到“Windows时间”服务,右键单击,选择“属性”。在“常规”选项卡中,将“启动类型”设置为“自动”,并确保“服务状态”为“正在运行”。在“登录”选项卡中,选择“本地服务”帐户,并不要输入密码。如果服务无法启动,可以在命令提示符中输入w32tm/register和ne......
  • Windows 安装 DB2数据库
    IBMDB2是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBMi(旧称OS/400)、z/OS,以及Windows服务器。 下载 DB2Express-CforWindowsx6410.1 免费版解压后,以管理员身份安装默认端口:5000用户名:db2admin密码:d......
  • Windows系统安装OpenSSL库最新版方法
    默认的Windows系统是不带openssl功能的,因此当需要生成密钥或证书时需要先安装openssl库。否则报错openssl:无法将“openssl”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 安装方法步骤一前往网站......
  • CPP编译器安装(Windows环境)
    编译器选择一些常用的C++编译器:GNUCompilerCollection(GCC):GCC支持多种编程语言,包括C++,是一个免费开源的编译器套件,我们常用的是以下两种。GCC:C语言编译器,也称为gcc**G++:**C++语言编译器,也称为g++它是许多Linux发行版的默认编译器,也可在其他操作系统上使用......
  • IDEA + Tomcat控制台乱码问题
    1.进入IDEA安装目录,进入bin文件夹,找到idea64.exe.vmoptions和idea.exe.vmoptions这两个文件,在每个文件新增2行,加入-Dfile.encoding=UTF-8和-Dconsole.encoding=UTF-82.打开IDEA,file—settings—Editor—FileEncodings的GlobalEncoding和ProjectEncoding和Defaultenc......