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

CMD、PowerShell,乱码成这样,微软难道没有点 13 数么?

  •  
  •   Chigogo · 2017-09-30 15:42:26 +08:00 · 7847 次点击
    这是一个创建于 2371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不切换 UTF 8 乱码; 切换成 UTF 8 文字显示直接错位(截图为 utf 8 模式): cmd.gif

    Win10 专业 1703 版 15063.632

    46 条回复    2017-10-03 04:40:06 +08:00
    hjc4869
        1
    hjc4869  
       2017-09-30 15:50:22 +08:00   ❤️ 2
    当然没有,在微软我们文件名和路径都是用英文的。
    charove
        2
    charove  
       2017-09-30 15:51:15 +08:00
    就我一个人能看到图片吗??

    cmd.gif
    hjc4869
        3
    hjc4869  
       2017-09-30 15:55:26 +08:00   ❤️ 2
    另外不支持中文路径是程序不用 unicode api 的锅,跟 CMD 没啥关系。
    stanjia
        4
    stanjia  
       2017-09-30 16:15:56 +08:00
    此 cmd 确实不是给人类用的.
    h4x3rotab
        5
    h4x3rotab  
       2017-09-30 16:19:24 +08:00
    微软的原罪之一
    cyr1l
        6
    cyr1l  
       2017-09-30 16:32:37 +08:00 via iPhone
    命令行工具是我选择 Mac 的原因之一。
    imydou
        7
    imydou  
       2017-09-30 16:38:55 +08:00   ❤️ 1
    只有我是冲着
    13 数
    进来的吗?
    low
    Chigogo
        8
    Chigogo  
    OP
       2017-09-30 17:02:56 +08:00
    @imydou 哈?
    @cyr1l 虽然有子系统,,但是微软明明能做好……
    @stanjia @h4x3rotab 同意
    crash
        9
    crash  
       2017-09-30 18:38:25 +08:00   ❤️ 1
    微软引以为傲的改写模式,经常弱鸡一样的出现,这是 mac 比 windows 好用的最大因素。
    belleveinvis
        10
    belleveinvis  
       2017-09-30 18:40:22 +08:00
    知道,但我不能说
    belleveinvis
        11
    belleveinvis  
       2017-09-30 18:41:06 +08:00   ❤️ 1
    @Chigogo
    CONHOST 比你想象的麻烦得多,比如直到 Vista CONHOST 的输出都是直通显卡的,文字可以画到窗口外面
    rogwan
        12
    rogwan  
       2017-09-30 19:05:58 +08:00 via Android   ❤️ 1
    Linux 默认 utf-8,没什么乱七八糟的 bom,减少多少麻烦啊。微软不和 Linux 阵营统一步伐,明明就是故意的。
    EricCartman
        13
    EricCartman  
       2017-09-30 19:08:10 +08:00   ❤️ 1
    楼上已出现俩位微软员工😂
    qdwang
        14
    qdwang  
       2017-09-30 19:16:20 +08:00 via iPhone
    说明这个需求没有强烈到不惜成本来解决这个问题
    just1
        15
    just1  
       2017-09-30 19:41:07 +08:00 via Android
    +1,不知道怎么解决
    ovear
        16
    ovear  
       2017-09-30 19:49:45 +08:00 via Android   ❤️ 7
    觉得 b 数这个词很脏
    Chigogo
        17
    Chigogo  
    OP
       2017-09-30 20:10:01 +08:00
    @ovear 十三,记得哦
    zonghua
        18
    zonghua  
       2017-09-30 20:25:03 +08:00 via iPhone
    @rogwan 先有 Windows 还是先有 Linux
    hjc4869
        19
    hjc4869  
       2017-09-30 20:26:31 +08:00
    @rogwan Windows NT 开始开发的时候还没 UTF-8 这个东西,怎么统一?
    cchange
        20
    cchange  
       2017-09-30 20:47:33 +08:00 via iPhone
    powershell 会不会好一些
    Chigogo
        21
    Chigogo  
    OP
       2017-09-30 21:13:26 +08:00
    @cchange 完全一样……
    azh7138m
        22
    azh7138m  
       2017-09-30 21:21:00 +08:00 via Android
    没有。
    yarn 在 Windows 下画面太美,开发体验极差。
    巨硬砍掉了 onedrive 无限存储我现在还很难受。
    hugee
        23
    hugee  
       2017-09-30 21:59:17 +08:00
    @ovear 是的。
    geelaw
        24
    geelaw  
       2017-09-30 22:24:33 +08:00
    我理解 @rogwan 是在讽刺这样说的人(反语)

    另外这明显是程序的问题,很多程序都能正常跑,为什么就 ffmpeg 不能?

    另外,在这个情况下难道不是用 test.avs 代替那个长的路径即可吗?
    Chigogo
        25
    Chigogo  
    OP
       2017-09-30 23:48:45 +08:00
    @geelaw 其他程序也有。说实话……就是场景不是很多
    Chigogo
        26
    Chigogo  
    OP
       2017-10-01 00:03:54 +08:00
    @geelaw avs 有小问题,也可能是 frameserver 的问题。视频直出会声音爆破。
    wdlth
        27
    wdlth  
       2017-10-01 00:58:00 +08:00
    命令提示符切成 UTF-8 编码,用 Python 执行 utf-8 字符集的文件容易出现各种奇葩 IO Error ……
    wengjin456123
        28
    wengjin456123  
       2017-10-01 01:17:13 +08:00
    这是我用 mac 的原因,命令行这块,微软确实没点 B 数
    icylogic
        30
    icylogic  
       2017-10-01 03:20:04 +08:00
    cmd 有这样的问题我完全可以理解。但是 Powershell 还这样,emmm
    开了个 issue,大家都去抱怨的话,M$才可能重视这问题吧

    https://github.com/PowerShell/PowerShell/issues/4964

    https://i.loli.net/2017/10/01/59cfedb4dbc3d.png
    icylogic
        31
    icylogic  
       2017-10-01 06:03:06 +08:00
    @belleveinvis

    https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/14849781-support-cjk-ime-under-cp65001

    你提的 uservoice 是关于这个话题的么。管 Powershell 项目的那个 Principal 在 issue 里告诉我 Powershell 解决不了,是 Windows Console 的问题,让我贴在 uservoice,是一个问题我就不重复发了。(看起来这个话题无人问津的样子)
    msg7086
        32
    msg7086  
       2017-10-01 07:57:51 +08:00   ❤️ 2
    首先你要搞清楚到底是 CMD/PowerShell 有问题还是 ConHost 有问题。

    很多时候人们老喜欢把 ConHost 的锅甩给 Shell。

    ConHost 有问题的话,你就算是掏出 Bash Zsh Fish Dash,一样炸穿。

    老老实实换个好点的 Term 吧,ConEmu / Cmder。
    mohoumk2
        33
    mohoumk2  
       2017-10-01 08:06:42 +08:00 via Android
    @ovear 自动脑补成 B 树就好
    kenshinji
        34
    kenshinji  
       2017-10-01 09:17:19 +08:00 via iPhone
    win 下请用 cmder
    watara
        35
    watara  
       2017-10-01 10:30:50 +08:00
    @imydou 我也是,不是很喜欢很多所谓的“梗”,不明白好好说话很难吗?
    expy
        36
    expy  
       2017-10-01 11:27:55 +08:00   ❤️ 1
    用 Linux 跑 vapoursynth 吧。
    g00001
        37
    g00001  
       2017-10-01 12:45:27 +08:00
    Windows 有 VS,C#这些东西,纯玩命令行的时候不多,所以 CMD 弱。
    CMD 内部也是 Unicode,但做了 ANSI 转换,对 UTF8 的支持很烂。类似的 Windows 上的一些开发工具:VB,易语言都是这个路数,不能愉快的 Unicode 经常遇到乱码。

    换任何一个支持 Uniocde 的编程语言都比用 CMD 方便,例如用 aardio 写几句代码调用 ffmpeg

    import console
    import process.popen

    prcs = process.popen("D:\ffmpeg\bin\ffmpeg.exe","-i","d:\test.mkv")
    prcs.codepage = 65001;//使用 UTF8 编码

    for( all,out,err in prcs.each() ){
    console.log( out,err );
    }

    console.pause();

    还可以给 ffmpeg 来个带界面的:

    windows 是干这事的
    Chigogo
        38
    Chigogo  
    OP
       2017-10-01 13:44:08 +08:00
    @g00001 老铁,扎心了。
    @kenshinji @msg7086 谢谢推荐。
    lxml
        39
    lxml  
       2017-10-01 13:47:45 +08:00 via Android
    个人以我,微软的命令行跟 Android 的权限管理一样基本属于积弊过深,无可救药,除了回炉重练,全面模仿 linux 的没有第二条路
    belleveinvis
        40
    belleveinvis  
       2017-10-01 18:42:31 +08:00   ❤️ 1
    @icylogic
    CONHOST 的源码我都不想去看它,满屏的汇编,强行指定内存布局,因为要兼容某个靠直接写内存写屏的程序……
    belleveinvis
        41
    belleveinvis  
       2017-10-01 18:45:47 +08:00
    @icylogic 你可以去圈 Rich Turner,整个 console 的老大
    Github 上面叫 bitcrazed
    hyperdak
        42
    hyperdak  
       2017-10-01 20:02:29 +08:00
    字符集的事,python 心里没点 B 数?
    ysc3839
        43
    ysc3839  
       2017-10-01 20:30:54 +08:00 via Android
    发现很多人搞混了 Terminal 和 Shell。Shell 的话就是 cmd powershell bash 这些。而 Terminal 是你看到的那个命令行窗口。
    Windows 的 conhost 功能差,这个是公认的。我认为微软也知道。但在微软修复 /改进之前,我选择第三方的 Terminal 如 ConEmu。
    troywinter
        44
    troywinter  
       2017-10-02 21:33:53 +08:00
    所以根据这个帖子的各个回答,大家给你的一致建议是,赚钱去买台 mac,Windows 就是这么工作的,你用的方法不对。。。
    Chigogo
        45
    Chigogo  
    OP
       2017-10-02 23:42:10 +08:00
    @troywinter 我有 Mac ……
    gnaggnoyil
        46
    gnaggnoyil  
       2017-10-03 04:40:06 +08:00
    emmmmmm 你指望 ffmpeg 这种一个 char 能同时当成 byte buffer 和 code point 的典型 C 程序碰到非 ASCII 编码能吐出什么象牙来.更何况 windows 下经过 mingw 的 glibc 那更是屎上加屎.LZ 最好还是通过 pipe 的方式喂输入吧.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3323 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:28 · PVG 21:28 · LAX 06:28 · JFK 09:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.