将 Windows 控制台的默认代码页更改为 UTF-8

Reg*_*ent 175 windows windows-7 encoding console

目前我运行的是 Windows 7 x64,通常我希望所有控制台工具都使用 UTF-8 而不是默认代码页 850。

chcp 65001在使用任何工具之前在命令提示符下运行会有所帮助,但有什么方法可以将其设置为默认代码页?

更新:

在我的情况下,更改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP65001使系统无法启动。

建议更改HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorunto@chcp 65001>nul正好符合我的目的。(感谢Ole_Brun

Nil*_*nde 126

要仅为控制台更改代码页,请执行以下操作:

  1. 开始 -> 运行 -> regedit
  2. [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. 将值更改为 @chcp 65001>nul

如果Autorun不存在,您可以添加一个New String

  • @galacticninja 简单地输入 `chcp 65001` 将导致每个打开的命令提示符打印“Active code page: 65001”,而 `@chcp 65001>nul` 将阻止任何输出。 (9认同)
  • 我在 Windows 8.1 下不存在 `Autorun`。 (8认同)
  • @kleinfreund @Luke:如果`Autorun` 不存在,你可以添加一个_New_ _String Value_ 的内容为`@chcp 65001>nul` (4认同)
  • @Dr.jacky 不确定它们对危险的确切含义。我刚刚回答了OP的问题。你是否应该这样做是一个不同的问题。我相信 Python 可能存在一些问题,因此您可能需要在至少将代码页设置为 65001 之前检查一下。 (2认同)

小智 56

就个人而言,我不喜欢更改注册表。这会导致很多问题。我创建了一个批处理文件:

@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS
Run Code Online (Sandbox Code Playgroud)

我另存C:\Windows\System32switch.bat并在cmd.exe桌面上创建了一个链接。

在 cmd 快捷方式的属性中,将目标更改为: C:\Windows\System32\cmd.exe /k switch

瞧,当我需要输入 UTF-8 时,我使用这个链接。

  • 请注意,它会将 `Active code page: 65001` 打印到 stdout。因此,如果您正在执行类似`CHCP 65001 && mycommand.exe` 的操作,那么您将在开始时打印出代码页。你需要`CHCP 65001 >nul && mycommand.exe` (9认同)

Ste*_*nny 40

编辑注册表:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"OEMCP"="65001"
Run Code Online (Sandbox Code Playgroud)

然后重新启动。使用此修复程序,如果您使用的是 Consolas 字体,它似乎会将 PowerShell 锁定为小字体。cmd.exe仍然工作正常。作为解决方法,您可以使用 Lucida Console,或者我切换到 Cascadia Mono:

https://github.com/microsoft/cascadia-code


Ist*_*115 35

在 Windows 10 的 1809 版本中,我设法通过转到系统的Language settings,选择Administrative language settings,单击Change system locale...并选中该Beta: Use Unicode UTF-8 for worldwide language support框然后重新启动我的电脑来永久解决此问题。

这样它就适用于所有应用程序,即使是那些我不是从命令提示符启动的应用程序!
(这对我来说是必要的,因为我试图从 Atom 编辑 Agda 代码。)

  • 这是现代 Windows 的最佳和正确答案。 (7认同)
  • 谢谢,解决了我的问题! (5认同)
  • 这当然对我有用。然而,它有一个令人讨厌的副作用:QuickBooks(我使用的是 2017 Professional)突然无法识别我的任何帐户名,因为它们包含 Unicode 字符,而且这个设置真的让那个软件搞砸了。只是一个提示... (2认同)
  • 嗯,系统一定已经习惯了那些名字的剥离版本或类似的东西。从来没有想过这会在修复其他东西时破坏一些东西,但我想你永远无法在不搞砸的情况下做出改变。(https://xkcd.com/1172/) 感谢您提供的信息,我希望它不会发生在许多其他人身上,但至少现在他们可以做好准备。 (2认同)
  • 作品。能够作为脚本进行复制会很有趣。它似乎将几个应对页面注册表 /sf/answers/4013930791/ 更改为 65001 (2认同)
  • 这可行,但会产生测试版功能所预期的副作用。在我的盒子里,水银客户端停止工作(甚至影响到乌龟)。使用命令行 Mercurial 时抛出“无效编码”错误,因此我不得不撤消此更改。 (2认同)

小智 6

这可以通过创建 PowerShell 配置文件并向其添加命令“chcp 65001 >$null”来完成:

PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile
Run Code Online (Sandbox Code Playgroud)

这不需要编辑注册表,并且与编辑快捷方式不同,如果使用 Windows 资源管理器上下文菜单在特定文件夹中启动 PowerShell,它将起作用。


小智 5

更改代码页的命令是chcp <codepage>. 例子:chcp 1252。您应该在 Powershell 窗口中键入它。为了避免每次都输入它的麻烦(如果您总是必须更改代码页),您可以将它附加到程序的命令行。为此,请按照下列步骤操作:

  1. 右键单击开始菜单上的 Powershell 图标,然后选择“更多”>“打开文件位置”。
  2. 右键单击 Powershell 快捷方式并选择“属性”。
  3. 将以下内容添加到“目标”命令行的末尾: -NoExit -Command "chcp 1252"

要开心。除非您别无选择,否则不要对 Windows 注册表大惊小怪。


归档时间:

查看次数:

392045 次

最近记录:

4 年,5 月 前