Chigogo
V2EX  ›  问与答

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

  •  
  •   Chigogo · Sep 30, 2017 · 9515 views
    This topic created in 3322 days ago, the information mentioned may be changed or developed.

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

    Win10 专业 1703 版 15063.632

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

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

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

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

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

    https://i.loli.net/2017/10/01/59cfedb4dbc3d.png
    icylogic
    icylogic
    Oct 1, 2017
    31
    @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
    msg7086
    Oct 1, 2017❤️2
    32
    首先你要搞清楚到底是 CMD/PowerShell 有问题还是 ConHost 有问题。

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

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

    老老实实换个好点的 Term 吧,ConEmu / Cmder。
    mohoumk2
    mohoumk2
    Oct 1, 2017 via Android
    33
    @ovear 自动脑补成 B 树就好
    kenshinji
    kenshinji
    Oct 1, 2017 via iPhone
    34
    win 下请用 cmder
    watara
    watara
    Oct 1, 2017
    35
    @imydou 我也是,不是很喜欢很多所谓的“梗”,不明白好好说话很难吗?
    expy
    expy
    Oct 1, 2017❤️1
    36
    用 Linux 跑 vapoursynth 吧。
    g00001
    g00001
    Oct 1, 2017
    37
    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
    Chigogo
    OP
    Oct 1, 2017
    38
    @g00001 老铁,扎心了。
    @kenshinji @msg7086 谢谢推荐。
    lxml
    lxml
    Oct 1, 2017 via Android
    39
    个人以我,微软的命令行跟 Android 的权限管理一样基本属于积弊过深,无可救药,除了回炉重练,全面模仿 linux 的没有第二条路
    belleveinvis
    belleveinvis
    Oct 1, 2017❤️1
    40
    @icylogic
    CONHOST 的源码我都不想去看它,满屏的汇编,强行指定内存布局,因为要兼容某个靠直接写内存写屏的程序……
    belleveinvis
    belleveinvis
    Oct 1, 2017
    41
    @icylogic 你可以去圈 Rich Turner,整个 console 的老大
    Github 上面叫 bitcrazed
    hyperdak
    hyperdak
    Oct 1, 2017
    42
    字符集的事,python 心里没点 B 数?
    ysc3839
    ysc3839
    Oct 1, 2017 via Android
    43
    发现很多人搞混了 Terminal 和 Shell。Shell 的话就是 cmd powershell bash 这些。而 Terminal 是你看到的那个命令行窗口。
    Windows 的 conhost 功能差,这个是公认的。我认为微软也知道。但在微软修复 /改进之前,我选择第三方的 Terminal 如 ConEmu。
    troywinter
    troywinter
    Oct 2, 2017
    44
    所以根据这个帖子的各个回答,大家给你的一致建议是,赚钱去买台 mac,Windows 就是这么工作的,你用的方法不对。。。
    Chigogo
    Chigogo
    OP
    Oct 2, 2017
    45
    @troywinter 我有 Mac ……
    gnaggnoyil
    gnaggnoyil
    Oct 3, 2017
    46
    emmmmmm 你指望 ffmpeg 这种一个 char 能同时当成 byte buffer 和 code point 的典型 C 程序碰到非 ASCII 编码能吐出什么象牙来.更何况 windows 下经过 mingw 的 glibc 那更是屎上加屎.LZ 最好还是通过 pipe 的方式喂输入吧.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5221 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 277ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    ♥ Do have faith in what you're doing.