默认情况下如何在cmd.exe中创建Unicode字符集?

Doc*_*der 59 windows unicode console cmd character-encoding

默认安装在Windows'cmd.exe中的866字符集与光荣的Unicode相比很差且不方便.

我可以默认安装Unicode或将cmd.exe替换为另一个控制台并使其默认,以便程序使用它而不是cmd.exe吗?

据我所知,chcp 65001仅在正在运行的控制台中更改编码.我想在系统级别更改charset.

小智 47

在我尝试了algirdas的解决方案之后,我的Windows崩溃了(Win 7 Pro 64bit)所以我决定尝试不同的解决方案:

  1. 开始Run(Win + R)
  2. 类型 cmd /K chcp 65001

你将获得你想要的大部分.要从任务栏或其他任何地方启动它,请创建一个快捷方式(您可以将其命名cmd.unicode.exe或任何您喜欢的名称)并将其更改TargetC:\Windows\System32\cmd.exe /K chcp 65001.

  • 使用代码页65001,所有Windows版本的控制台(甚至是Windows 10中的新控制台)都不支持非ASCII输入.它用于对其Unicode输入缓冲区进行编码的暂存缓冲区的大小基于系统ANSI代码页,该代码页通常为每个字符1个字节.但非ASCII UTF-8每个字符2-4个字节.因此,在控制台中编码非ASCII输入失败.但是,`ReadFile`返回它''成功'读取0个字节.大多数程序将此解释为EOF,在这种情况下,REPL/shell通常会退出. (3认同)
  • 是否可以在批处理文件中自动添加该命令?我的意思是这样`START cmd / K chcp 65001 STARTDTRé.xls` (2认同)
  • 对于代码页65001,Windows 7中的控制台(不是Windows 8+)错误地返回写入它的UTF-8的解码宽字符代码点的数量,而不是写入它的字节数,即`WriteFile`是*应该*返回.这导致应用程序重复写入错误确定的字节字符串的剩余部分,直到控制台返回所有"字节"(实际解码的宽字符)已写入.在每个包含非ASCII字符的打印之后,结果看起来像垃圾字符的尾随流. (2认同)

小智 19

注册文件

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console]
"CodePage"=dword:fde9
Run Code Online (Sandbox Code Playgroud)

命令提示符

REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 0xfde9
Run Code Online (Sandbox Code Playgroud)

电源外壳

sp -t d HKCU:\Console CodePage 0xfde9
Run Code Online (Sandbox Code Playgroud)

Cygwin的

regtool set /user/Console/CodePage 0xfde9
Run Code Online (Sandbox Code Playgroud)

  • 显示如何使用单行设置值的荣誉.请注意,它们都支持*decimal*输入,因此您可以直接使用65001. (3认同)

Alo*_* Or 14

打开提升的命令提示符(以管理员身份运行cmd).通过以下方式向控制台查询可用的TT字体:

    REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"
Run Code Online (Sandbox Code Playgroud)

您将看到如下输出:

    0    REG_SZ    Lucida Console
    00    REG_SZ    Consolas
    936    REG_SZ    *???
    932    REG_SZ    *?? ????
Run Code Online (Sandbox Code Playgroud)

现在我们需要添加一个支持Courier New所需字符的TT字体,我们通过在字符串名称中添加零来实现这一点,所以在这种情况下,下一个将是"000":

    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"
Run Code Online (Sandbox Code Playgroud)

现在我们实现UTF-8支持:

    REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f
Run Code Online (Sandbox Code Playgroud)

将默认字体设置为"Courier New":

    REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f
Run Code Online (Sandbox Code Playgroud)

将字体大小设置为20:

    REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以快速编辑:

    REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f
Run Code Online (Sandbox Code Playgroud)

  • 这是OP问题的直接答案:"默认情况下如何在cmd.exe中创建Unicode字符集?",所有步骤都尽可能清晰,正如Alastair McCormack所解释的那样:"没有像Unicode字符集这样的东西cmd.exe.chcp 65001提供了一些UTF-8解码,但它非常简陋,并没有提供正确的输入." 所以我认为不需要解释给定答案的Pro和Con. (2认同)

Sha*_* Li 8

将以下内容保存到带有".reg"后缀的文件中:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:0000fde9
Run Code Online (Sandbox Code Playgroud)

双击此文件,regedit将导入它.

它基本上将键设置HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage为0xfde9(十进制系统中为65001).

  • 请详细说明这意味着什么.你怎么设置一把钥匙?OP可能没有注意到注册.解释一下.还解释了fde9(65001)代码.谢谢. (4认同)