V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
simple26
V2EX  ›  问与答

求 Windows cmd 正确的编码设置姿势

  •  
  •   simple26 · 2015-11-14 08:57:50 +08:00 · 9081 次点击
    这是一个创建于 3299 天前的主题,其中的信息可能已经有所发展或是发生改变。
    似乎发现一个问题:
    如果使用 utf-8 编码,对于中文文件名啥的的确可以识别,但是对于命令中有中文提示的话,例如:#java ,命令输出里的中文就会显示乱码。
    如果使用 gbk 编码,命令输出是正确了,中文文件名又装逼看不起人了。

    请问 V 友们是怎么设置的
    16 条回复    2016-11-18 16:42:40 +08:00
    msg7086
        1
    msg7086  
       2015-11-14 09:02:09 +08:00
    没记错的话 cmd 这货已经没救了。
    换 msys2 内置 tty 试试……
    ConEmu 我记得都要手动转成 GBK 输出才能正常显示。
    simple26
        2
    simple26  
    OP
       2015-11-14 09:07:08 +08:00
    @msg7086 有尝试过 babun,不过问题依旧。那我再试一下 msys2~
    simple26
        3
    simple26  
    OP
       2015-11-14 09:25:03 +08:00
    @msg7086 msys2 也不行,可能 cmd 真的没救了。不过 win 的 powershell 没这个问题,以前还真没注意到有这个 powershell.
    ipeony
        4
    ipeony  
       2015-11-14 10:06:05 +08:00
    没找到解决方案,后来重装都直接英文版系统了。。。
    msg7086
        5
    msg7086  
       2015-11-14 10:13:50 +08:00
    @simple26 msys2 里的 tty ,不是 msys2 。
    powershell 默认 utf-8 ,然而并没有什么
    h404bi
        6
    h404bi  
       2015-11-14 10:32:18 +08:00   ❤️ 4
    用 MSYS2 或者 Git Bash (基于 MSYS2 ),然后需要做些设置。

    1. Options 里 Text 选项卡中的 Character set 设置为 UTF-8 ,这样可以正常识别 utf8 相关的文件。


    2. 这样设置后,在 Mintty 窗口下运行一些 Win 上的命令时会出现乱码(比如 ping, ipconfig 等)


    3. 针对这些命令,使用 winpty 进行字符流转换。具体是先安装 winpty ( Git Bash 已自带),然后使用 winpty 执行这类命令($ winpty ping www.v2ex.com )即可正常显示中文。
    trimleo
        7
    trimleo  
       2015-11-14 10:37:42 +08:00
    赞楼上
    bugsnail
        8
    bugsnail  
       2015-11-14 10:49:39 +08:00
    其实 power shell 就已经够了,兼容部分 linux 命令
    yangff
        9
    yangff  
       2015-11-14 11:13:35 +08:00
    Windows PowerShell ISE
    bdbai
        10
    bdbai  
       2015-11-14 12:53:19 +08:00 via iPhone
    @h404bi
    @msg7086
    搭车问一下, Git Bash 里面敲 ipconfig /flushdns 的时候,参数总是不能正确识别,怎么破?
    imn1
        11
    imn1  
       2015-11-14 12:53:43 +08:00   ❤️ 1
    DOS 命令,更改当前 DOS 编码环境:
    chcp 65001 #相当于 utf-8
    chcp 932 #相当于 gbk
    chcp 932 #相当于 shift-jis
    chcp 949 #相当于 euc-kr
    chcp 950 #相当于 big5
    想永久改变(默认值),网上搜搜,有注册表,因为不单要改编码,还要改字体等好几项,所以需要注册表

    为什么是“相当于”,因为 M$的 codepage 与对应的编码有轻微不同,不多,几个到几十个字符而已,一般不影响
    megabits
        12
    megabits  
       2015-11-14 12:57:32 +08:00
    cmd 就是渣渣, PowerShell 才能用。
    h404bi
        13
    h404bi  
       2015-11-14 13:13:50 +08:00
    @bdbai 将斜杠(/)换成减号(-)试试。
    joshz
        14
    joshz  
       2015-11-14 14:35:05 +08:00
    @imn1 chcp 65001 用过就知道并没有想象的那么美好,还是 cmd.exe 太弱鸡了。按某轮子的说法,这是微软强推 PowerShell 的策略,要提升 cmd.exe 微软不会有技术难点,就是不愿意而已。
    imn1
        15
    imn1  
       2015-11-14 15:27:08 +08:00
    @joshz
    cmd 确实不好,我只是测试 cli 用,或者临时打开跑个命令
    如果长期用确实需要第三方终端,我自己都在寻找
    感觉 M$一直重心放在窗口化,终端总是格格不入
    Alife
        16
    Alife  
       2016-11-18 16:42:40 +08:00
    chcp 65001 #相当于 utf-8
    添加到 ~/.babunrc 中就好了,不用修改注册表
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:38 · PVG 04:38 · LAX 12:38 · JFK 15:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.