PowerShell 7 默认编码方式修改

本文介绍了如何在Windows环境下,仅修改PowerShell7的默认编码,使其能正确处理GBK编码文件,避免了大规模更改Windows系统编码可能带来的风险。方法包括设置$PROFILE文件、指定特定编码和执行策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows 环境安装的 PowerShell 7 默认编码解码是 UTF8 NoBom,用这个CodePage直接操作未修改默认编码的 Windows 文件内容,产生乱码不能识别的情况。有些文章采取变更整个 Windows的编码方式,但应用在已经使用一段时间的服务器上,因已存储了大量数据,有可能造成已存储文件错误。

以下方法只修改 PowerShell 7 的默认编码方式,实际测试可以读取和写入GBK编码文件。

1、在 PowerShell 7 命令窗口运行,如果 $PROFILE 不存在则创建

PS C:\> if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }

 2024-9-12 增加,$PROFILE 变量不加后缀,是当前用户当前主机的配置文件,也就是 $PROFILE.CurrentUserCurrentHost 。

如果需要配置计划任务,以Administrator身份运行脚本,则应配置所有用户当前主机,变量是 $PROFILE.AllUsersCurrentHost。

如需配置远程环境,则使用当前用户所有主机 $PROFILE.CurrentUserAllHosts,或所有用户所有主机 $PROFILE.AllUsersAllHosts

2、指令以 notepad.exe 打开 $PROFILE,VScode 之类任何文本类编辑器都可以。

PS C:\> notepad.exe $PROFILE

3、在新打开的 $PROFILE 也就是 Microsoft.PowerShell_profile.ps1 文件中插入内容。

# 参照WindowsPowerShell,也就是自带的那个版本,使用ASCII进行西文编码。
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.Encoding]::ASCII;
# 修改默认所有包含Encoding名称的参数值为GBK
$PSDefaultParameterValues['*:Encoding'] = 'GBK';
# 修改CodePage为936,并不做输出。
chcp.com 936 > $null

4、 $PROFILE 实际也是一个 .ps1 脚本,需要设置本地未经数字签名也可以执行的权限。

PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

        也可以简单设置成任何脚本均不核对签名。

PS C:\> Set-ExecutionPolicy Unrestricted

此后,同一个 Windows 用户再打开 PowerShell 7 终端时,与 Windows 自带的 PowerShell 5.1 环境相同。

附:

PowerShell 执行

PS C:\> [System.Text.Encoding]::GetEncodings()

可以列出全部 Windows 系统可支持的编码代码页,CP936实际上是GBK,CP20936是老的GB2312-1980编码,20936缺失很多字,比如瞭望的瞭。

可以用以下代码编写脚本自行测试:

# 测试脚本内修改PowerShell环境变量,以识别GB2312或GBK编码。PowerShell列表内未见GB18030页面支持。

Add-Content -Path "c:\testencoding.txt" -Encoding ascii -Value "This line is encoding by GB2312: " -NoNewline
Add-Content -Path "c:\testencoding.txt" -Encoding 20936 -Value “GB2312汉字写入测试,标志字符-瞭”
Add-Content -Path "c:\testencoding.txt" -Encoding ascii -Value "This line is encoding by GBK: " -NoNewline
Add-Content -Path "c:\testencoding.txt" -Encoding 936 -Value “GBK汉字写入测试,标志字符-瞭”
Add-Content -Path "c:\testencoding.txt" -Encoding ascii -Value "This line is encoding by UTF-8: " -NoNewline
Add-Content -Path "c:\testencoding.txt" -Encoding utf8 -Value “UTF-8汉字写入测试,标志字符-瞭”

另,WindowsPowerShell 和 PowerShell 7 的 $PROFILE 指向的路径不同,但文件名一致。

本文参考文档:

自定义 shell 环境 - PowerShell | Microsoft Learn

关于字符编码 - PowerShell | Microsoft Learn

关于执行策略 - PowerShell | Microsoft Learn

2024-9-12 增加 Profile 说明,来源文档:

配置文件简介 - PowerShell | Microsoft Learn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值