powershell、cmd终端修改编码

文章第一次修改时间2022年8月11日00:31:39

文章第二次修改时间2024年1月15日09:24:53

本文作者:xututu6

本文链接:https://www.cnblogs.com/xututu6/p/16574454.html

搬运请保留保留本文章分享链接

powershell文档

官方文档:

powershell-7

windows-powershell

中文版win10 Powershell默认编码为GB2312,而编程中常用编码格式为UTF-8。在UTF-8格式下编写的中文输出信息,在Powershell中执行程序就会显示乱码,这时需要更改编码格式。

1、chcp 命令临时修改

chcp是源于cmd的命令,用于改变代码页CodePage,PowerShell中也可使用,但需在启动PowerShell时使用才有效,因为 .net会缓存启动时的代码页,在PowerShell会话中再使用chcp改变代码页会被忽略。所以,可以实现目标,但要注意使用方法.

控制台:

在CMD或PowerShell中运行

powershell -NoExit -Command "chcp 65001"

可以开启一个UTF8的PowerShell。

或直接在powershell中执行
chcp命令

chcp 65001

2、 添加PowerShell配置文件修改(推荐)

配置文件文件

PowerShell 支持多个配置文件。 此外,PowerShell 主机程序还可以支持自己的特定于主机的配置文件。

例如,PowerShell 控制台支持以下基本配置文件。 配置文件按优先顺序列出。 第一个配置文件的优先级最高。

  • 所有用户,所有主机
    • Windows - $PSHOME\Profile.ps1
    • Linux - /opt/microsoft/powershell/7/profile.ps1
    • macOS - /usr/local/microsoft/powershell/7/profile.ps1
  • 所有用户,当前主机
    • Windows - $PSHOME\Microsoft.PowerShell_profile.ps1
    • Linux - /opt/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
    • macOS - /usr/local/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
  • 当前用户,所有主机
    • Windows - $HOME\Documents\PowerShell\Profile.ps1
    • Linux - ~/.config/powershell/profile.ps1
    • macOS - ~/.config/powershell/profile.ps1
  • 当前用户,当前主机
    • Windows - $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
    • Linux - ~/.config/powershell/Microsoft.PowerShell_profile.ps1
    • macOS - ~/.config/powershell/Microsoft.PowerShell_profile.ps1

配置文件路径包括以下变量:

  • 变量 $PSHOME ,用于存储 PowerShell 的安装目录
  • 变量 $Home ,用于存储当前用户的主目录

此外,托管 PowerShell 的其他程序可以支持自己的配置文件。 例如,Visual Studio Code支持以下特定于主机的配置文件。

说明 路径
所有用户,当前主机 $PSHOME\Microsoft.VSCode_profile.ps1
当前用户,当前主机 $Home[我的 ]Documents\PowerShell\ Microsoft.VSCode_profile.ps1

在 PowerShell 帮助中,“CurrentUser,Current Host”配置文件是最常称为“你的 PowerShell 配置文件”的配置文件。

  • Windows PowerShell$OutputEncoding - 有关详细信息,请参阅此答案
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
  • 例如,这是一种以$PROFILE编程方式添加这一行的快速而简单的方法:
'$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding' + [Environment]::Newline + (Get-Content -Raw $PROFILE -ErrorAction SilentlyContinue) | Set-Content -Encoding utf8 $PROFILE

Windows举例操作

文件位置位于C:\Windows\System32(没有要自己建)

%windir%\system32\WindowsPowerShell\v1.0\profile.ps1

它作用于所有用户、所有的Shell。

%windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1

作用于所有用户,但只作用于Microsoft.PowerShell这个shell

下面位于文档目录

操作:
① PowerShell中运行

New-Item -ItemType File -Path $PROFILE -Force

会在 C:\Users<用户名>\Documents\WindowsPowerShell 下创建配置文件(当前用户、当前主机类型)Microsoft.PowerShell_profile.ps

%UserProfile%\\Documents\\WindowsPowerShell\profile.ps1

作用于当前用户的所有shell。

%UserProfile%\\Documents\\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

作用于当前用户的Microsoft.PowerShell这个shell。

要改的内容

$OutputEncoding = [Console]::OutputEncoding = (new-object System.Text.UTF8Encoding $false)
$env:PYTHONIOENCODING = "utf-8"

或者

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

3、系统区域设置修改

  • 输入win + r,输入intl.cpl(在控制面板中打开区域设置)
  • 依次点击
  • 管理>更改系统区域设置>勾选UTF-8提供全球语言支持>确认>重启

4、注册表修改

对于cmd.exe

通过注册表定义一个自动运行命令,AutoRun键值

(仅限当前用户)

HKEY_CURRENT_USER\Software\Microsoft\Command Processor

或(所有用户)

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
  • 例如,您可以使用 PowerShell 为您创建此值:
# Auto-execute `chcp 65001` whenever the current user opens a `cmd.exe` console
# window (including when running a batch file):
Set-ItemProperty 'HKCU:\Software\Microsoft\Command Processor' AutoRun 'chcp 65001 >NUL'

操作

① 打开注册表编辑器

输入win + r,输入 regedit

计算机\HKEY_CURRENT_USER\Software\Microsoft\Command Processor

或者

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

② 添加 autorun 字符串值

  1. 右键 > 新建 > 字符串值 (REG_SZ)

  2. 命名为

     autorun
    
  3. 双击,将值修改为

    chcp 65001
    

    可以避免每次使用都输出 Active code page: 65001

对于PowerShell

输入win + r,输入 regedit

修改注册表的这个位置:

计算机\HKEY_CURRENT_USER\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe

找到codepage代码页的名称

双击CodePage修改键值为指定编码的数字代号(10进制"自己想要的编码" ;推荐“65001”)

  • 效果:对于直接启动PowerShell.exe有效,通过快捷方式启动、在新的Windows Terminal终端启动、在VSCode集成终端启动 均无效。
  • 原因解释:快捷方式启动PowerShell和直接运行PowerShell.exe有区别,快捷方式上可以附加设置(可以对快捷方式右键查看属性),会覆盖exe程序本身的设置。Terminal和VSCode不确定,可能是同理吧。

chcp命令使用的数字编码表

https://learn.microsoft.com/zh-cn/windows/win32/intl/code-page-identifiers

参考文章

https://blog.csdn.net/LinXuanran/article/details/124651630

https://blog.csdn.net/weixin_44358931/article/details/124954728

https://stackoverflow.com/questions/57131654/using-utf-8-encoding-chcp-65001-in-command-prompt-windows-powershell-window

https://stackoverflow.com/questions/49476326/displaying-unicode-in-powershell/49481797#49481797
posted @ 2022-08-11 00:29  xututu6  阅读(4441)  评论(0编辑  收藏  举报