CMD、PowerShell,乱码成这样,微软难道没有点 13 数么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Chigogo
V2EX    问与答

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

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

    不切换 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     Solana     2314 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 01:02 PVG 09:02 LAX 18:02 JFK 21:02
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86