在使用任何工具之前在命令提示符下运行
chcp 65001
有助于但是有什么方法可以设置为默认代码页吗?更新:
将
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP
值更改为65001
似乎使系统无法启动。将
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun
更改为@chcp 65001>nul
的建议对我而言非常有用。 (感谢Ole_Brun)#1 楼
要仅更改控制台的代码页,请执行以下操作:开始->运行-> regedit
转到
[HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
将值更改为
@chcp 65001>nul
如果不存在
Autorun
,则可以添加New String
评论
@Regent在问题中,您提到的对您有用的注册表值是@chcp 65001> nul,而在此可接受的答案中是chcp65001。两者之间有什么区别?
–银河忍者
15年3月16日在8:41
@galacticninja只需将chcp 65001放入,将使每个打开的命令提示符都打印“活动代码页:65001”,而@chcp 65001> nul将阻止任何输出。
–摄政王
15年3月26日在15:51
Windows 8.1下没有自动运行功能。
– kleinfreund
2015年5月10日在9:09
@kleinfreund @Luke:如果不存在自动运行,则可以添加一个新字符串值,其内容为@chcp 65001> nul
– Dacto
18-10-23在20:45
@ Dr.jacky不确定确切的含义意味着危险。我刚刚回答了OP的问题。是否应该这样做是另一个问题。我认为Python可能存在一些问题,因此您可能要在至少将代码页设置为65001之前进行检查。
–尼尔斯·玛格妮·伦德(Nils Magne Lunde)
18/12/18在6:59
#2 楼
就个人而言,我不喜欢更改注册表。这会引起很多问题。我创建了一个批处理文件:@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS
我在
C:\Windows\System32
中保存为switch.bat。我在cmd.exe上创建了一个链接。桌面。
在cmd快捷方式的属性中,将目的地更改为:
C:\Windows\System32\cmd.exe /k switch
Voilá,当我需要输入UTF-8时,请使用此链接。
评论
请注意它将打印活动代码页:65001到标准输出。因此,如果您正在执行CHCP 65001 && mycommand.exe之类的操作,则将在开始时打印出代码页。您需要CHCP 65001> nul && mycommand.exe
– frumbert
2015年6月12日在5:33
#3 楼
编辑注册表:Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"OEMCP"="65001"
然后重新启动。通过此修复程序,如果您使用Consolas字体,似乎可以将PowerShell锁定为较小的字体。
cmd.exe
仍然可以正常工作。解决方法,您可以使用Lucida控制台,或者我改用Cascadia Mono:
https://github.com/microsoft/cascadia-code
评论
事实是,它仅适用于CMD,不适用于控制台本身。
– AnrDaemon
19年9月6日在9:10
#4 楼
在Windows 10的1809版本中,我设法永久解决此问题,方法是转到系统的Language settings
,选择Administrative language settings
,单击Change system locale...
,然后选中Beta: Use Unicode UTF-8 for worldwide language support
框,然后重新启动我的电脑。这种方式适用所有应用程序,甚至是那些我不是从命令提示符启动的应用程序!
(这对我来说是必需的,因为我试图从Atom中编辑Agda代码。)
评论
谢谢,它解决了我的问题!
–贾巴
20-2-22在10:09
这是现代Windows的最佳和正确答案。
– CAD97
20年4月1日在21:06
这无疑为我完成了工作。但是,它有一个令人讨厌的副作用:QuickBooks(我使用2017年专业版)突然无法识别我的任何帐户名,因为它们包含Unicode字符,并且此设置确实使该软件搞砸了。单挑...
–迈克·艾伦(Mike Allen)
20 Apr 15'在18:42
嗯,系统必须已经习惯了这些名称或类似名称的简化版本。从来没有想过这会在修复其他问题时会破坏东西,但是我想您永远都无法做出改变而不弄乱某些东西。 🙃(xkcd.com/1172)感谢您提供的信息,我希望其他人不会遇到这种情况,但至少现在他们可以做好准备。
–Isti115
20-4-15在19:24
#5 楼
这可以通过创建PowerShell配置文件并向其添加命令“ chcp 65001> $ null”来完成:PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile
这不需要编辑注册表,并且与编辑快捷方式不同,如果使用Windows资源管理器上下文菜单在特定文件夹中启动PowerShell,将可以正常工作。
评论
@PimpJuiceIT,不。请参阅此答案的第一行。
– Dacto
18/12/14在17:21
#6 楼
更改代码页的命令是chcp <codepage>
。例如:chcp 1252
。您应该在Powershell窗口中键入它。为避免每次都键入它的麻烦(如果始终需要更改代码页),可以将其附加到程序的命令行中。这样做,请按照下列步骤操作:
右键单击“开始”菜单上的Powershell图标,然后选择“更多”>“打开文件位置”。
右键单击Powershell快捷方式,然后选择“属性”。
在“目标”命令行的末尾添加以下内容:
-NoExit -Command "chcp 1252"
请开心。
不要大惊小怪Windows注册表,除非您没有其他选择。
评论
这个对我来说很完美。 -NoExit-命令“ chcp 1252> null”在开头也忽略了有关所选代码页的消息。
– CodeMonkey
18年8月3日在8:53
#7 楼
如果您使用的是ConEmu,则:从右上方菜单中打开设置
转到“启动->环境”
在新行上添加
chcp 65001
。单击“保存设置”。
关闭ConEmu并重新打开它
评论
请注意,有针对性的解决方案可能会破坏Windows的find.exe(这会导致Android SDK构建出现问题):superuser.com/questions/176737/…使用UTF-8代码页还会中断more命令(它会提供误导性的错误消息“内存不足”。)使用/ U开关打开命令提示符无济于事。
如果将编码设置为不受支持的多字节代码页(例如65001),则Windows控制台上将布满bug。任何使用Win32 WriteFile / ReadFile API输出计数的软件都将得到错误的结果,因此,像MSVCRT那样在此基础上进行构建当遇到非ASCII时,stdlib的实现将产生错误的/重复的输出并挂在输入上。在MS修复它之前-几十年来一直没有发生这种情况-将控制台代码页全局更改为65001是一个非常糟糕的主意。
Windows功能的A版本的任何使用都已中断。所有代码都需要移植才能使用W版本。
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Nls \ CodePage \ OEMCP用作非Unicode(non-utf)环境的后备,显然,您尝试将其强制为“ unicode”,因为您认为它在定义上存在争议。 Windows挂起,可能是因为某些系统启动时依赖非Unicode字符集来工作。