如何在Windows命令行中使用unicode字符? 我们在Team Foundation Server(TFS)中有一个项目,里面有一个非英语字符。在尝试编写一些与构建相关的东西时,我们偶然发现了一个问题—我们无法将š字母传递给命令行工具。命令提示符或其他命令会把它搞砸,tf.exe实用程序找不到指定的项目

如何在Windows命令行中使用unicode字符? 我们在Team Foundation Server(TFS)中有一个项目,里面有一个非英语字符。在尝试编写一些与构建相关的东西时,我们偶然发现了一个问题—我们无法将š字母传递给命令行工具。命令提示符或其他命令会把它搞砸,tf.exe实用程序找不到指定的项目,unicode,command-line,input,windows-console,Unicode,Command Line,Input,Windows Console,我尝试了不同格式的.bat文件(ANSI、UTF-8,带和不带),也尝试了用JavaScript编写脚本(本质上是Unicode),但运气不好。如何执行程序并向其传递Unicode命令行?试试: chcp 65001 这会将代码页更改为UTF-8。此外,您还需要使用Lucida控制台字体。实际上,诀窍在于命令提示符实际上理解这些非英语字符,只是不能正确显示它们 当我在命令提示符中输入包含一些非英语字符的路径时,它显示为“?”。当您提交命令(我的情况是cd)时,一切都按预期进行。我也有同样的问题

我尝试了不同格式的.bat文件(ANSI、UTF-8,带和不带),也尝试了用JavaScript编写脚本(本质上是Unicode),但运气不好。如何执行程序并向其传递Unicode命令行?

试试:

chcp 65001

这会将代码页更改为UTF-8。此外,您还需要使用Lucida控制台字体。

实际上,诀窍在于命令提示符实际上理解这些非英语字符,只是不能正确显示它们

当我在命令提示符中输入包含一些非英语字符的路径时,它显示为“?”。当您提交命令(我的情况是cd)时,一切都按预期进行。

我也有同样的问题(我来自捷克共和国)。我安装了英文版的Windows,并且我必须在共享驱动器上处理文件。文件的路径包括特定于捷克语的字符

适合我的解决方案是:

在批处理文件中,更改字符集页面

我的批处理文件:

chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp
批处理文件必须保存在CP 1250中

请注意,控制台不会正确显示字符,但会理解它们…

对于类似的问题,(我的问题是在命令提示符下显示MySQL中的UTF-8字符)

我是这样解决的:

  • 我将命令提示符的字体改为Lucida控制台。(此步骤必须与您的情况无关。它只与您在屏幕上看到的内容有关,而与角色的真实内容无关)

  • 我将代码页更改为Windows-1253。您可以通过“chcp 1253”在命令提示下执行此操作。在我想看UTF-8的情况下,它起了作用


  • 检查非Unicode程序的语言。如果您在Windows控制台中遇到俄语问题,则应在此处设置俄语:


    一个更干净的方法是:只需安装可用的免费Microsoft日语语言包。(其他东方语言包也可以,但我已经测试了日语包。)


    这将为您提供具有更大字形集的字体,使其成为默认行为,更改各种Windows工具,如cmd、写字板等。

    将代码页更改为1252对我来说很有用。我的问题是DOS在Windows Server 2008上将符号double doller§转换为另一个符号


    我在BCP语句^§中使用了CHCP 1252及其前面的cap。

    如果您在DOS窗口中键入路径/文件名时计算机显示的路径/文件名正确,则快速决定.bat文件:

  • 复制con temp.txt[按Enter键]
  • 键入路径/文件名[按Enter键]
  • 按Ctrl-Z键[按Enter键]
  • 这样您就可以创建一个.txt文件-temp.txt。在记事本中打开它,复制文本(不要担心它看起来不可读)并粘贴到.bat文件中。
    在DOS窗口中执行以这种方式创建的.bat适用于mö(西里尔语,保加利亚语)。

    很难更改Windows控制台的默认代码页。当你搜索网页时,你会发现不同的建议,但是其中一些可能会完全破坏你的Windows,即你的电脑不再启动

    最安全的解决方案是: 转到您的注册表项
    HKEY\U CURRENT\U USER\Software\Microsoft\Command Processor
    并添加字符串值
    Autorun
    =
    chcp 65001

    或者,您可以将此小批量脚本用于最常见的代码页

    @ECHO off
    
    SET ROOT_KEY="HKEY_CURRENT_USER"
    
    
    FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i
    
    ECHO System default values:
    
    ECHO.
    ECHO ...............................................
    ECHO Select Codepage 
    ECHO ...............................................
    ECHO.
    ECHO 1 - CP1252
    ECHO 2 - UTF-8
    ECHO 3 - CP850
    ECHO 4 - ISO-8859-1
    ECHO 5 - ISO-8859-15
    ECHO 6 - US-ASCII
    ECHO.
    ECHO 9 - Reset to System Default (CP%OEMCP%)
    ECHO 0 - EXIT
    ECHO.
    
    
    SET /P  CP="Select a Codepage: "
    
    if %CP%==1 (
        echo Set default Codepage to CP1252
        reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
    ) else if %CP%==2 (
        echo Set default Codepage to UTF-8
        reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
    ) else if %CP%==3 (
        echo Set default Codepage to CP850
        reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
    ) else if %CP%==4 (
        echo Set default Codepage to ISO-8859-1
        add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
    ) else if %CP%==5 (
        echo Set default Codepage to ISO-8859-15
        add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
    ) else if %CP%==6 (
        echo Set default Codepage to ASCII
        add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
    ) else if %CP%==9 (
        echo Reset Codepage to System Default
        reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
    ) else if %CP%==0 (
        echo Bye
    ) else (
        echo Invalid choice
        pause
    )
    
    使用
    @chcp 65001>nul
    而不是
    chcp 65001
    会抑制每次启动新命令行窗口时获得的输出“活动代码页:65001”

    您可以从中获得的所有可用号码的完整列表


    注意,这些设置仅适用于当前用户。如果要为所有用户设置它,请将行
    set ROOT\u KEY=“HKEY\u CURRENT\u USER”
    替换为
    set ROOT\u KEY=“HKEY\u LOCAL\u MACHINE”

    我在批处理文件中通过短(8点3)名称引用Unicode命名的文件,从而避免了类似的问题


    可以通过执行
    dir/x
    查看短名称。显然,这只适用于已知的Unicode文件名。

    一个非常简单的选项是安装Windows bash shell,如并使用:

    由于您需要使用Unix命令行功能,因此有一点学习经验,但您会喜欢它的强大功能,并且可以将console字符集设置为UTF-8


    当然,您还可以获得所有常见的*nix功能,如grep、find、less等。

    由于我还没有看到任何关于Python 2.7的完整答案,我将概述两个重要步骤和一个非常有用的可选步骤

  • 您需要一种支持Unicode的字体。Windows附带Lucida控制台,可通过右键单击命令提示符的标题栏并单击默认值选项来选择。这也提供了颜色。请注意,您也可以通过选择
    Properties
    来更改以特定方式调用的命令窗口的设置(例如,在此处打开,Visual Studio)
  • 您需要将代码页设置为
    cp65001
    ,这似乎是Microsoft试图为命令提示符提供UTF-7和UTF-8支持。通过在命令提示符下运行chcp 65001来执行此操作。设置后,将保持此方式,直到窗口关闭。每次启动cmd.exe时都需要重新执行此操作
  • 有关更持久的解决方案,请参阅关于超级用户的。简而言之,创建一个
    REG_SZ
    
        REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"
    
        0    REG_SZ    Lucida Console
        00    REG_SZ    Consolas
        936    REG_SZ    *新宋体
        932    REG_SZ    *MS ゴシック
    
        REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"
    
        REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f
    
        REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f
    
        REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f
    
        REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f