V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Osk
V2EX  ›  Visual Studio Code

VS Code 编码检测很难用, 大家是怎么避免的

  •  
  •   Osk · 2019-04-07 12:39:50 +08:00 · 8724 次点击
    这是一个创建于 2086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    复现

    打开 VS Code 的自动编码检测.

    新建一个文件另存为 UTF-8, 关闭文件, 再打开.

    然后文件可能默认被打开为 Windows 1252 了.

    致命的地方是, 有些文件一开始是没有中文 /emoji 等非 ANSI 字符的, 没注意到就修改并保存了, 可能会影响个别字符...虽然一般不至于.

    ========

    好吧, 混用编码是我的锅, 主要是默认的 workspace 里面 GB18030/UTF-8 等编码都有, 换行符也是什么都有, 依赖编码检测功能.

    暂时的解决办法是修改新工作区的设置, 关闭自动编码检测, 统一成 UTF-8, 很烦.

    VSCode 的 github issue 里面好像有几个报告的, 但没修复的感觉...

    14 条回复    2024-03-04 11:54:59 +08:00
    josephpei
        1
    josephpei  
       2019-04-07 12:49:37 +08:00 via Android
    有个东东叫 editorconfig 了解下
    Osk
        2
    Osk  
    OP
       2019-04-07 12:52:51 +08:00   ❤️ 1
    @josephpei editorconfig 指的是全局设置??? 然而我就是需要在全局设置里面打开自动编码检测啊
    herozzm
        3
    herozzm  
       2019-04-07 13:00:25 +08:00 via iPhone
    尽量不依赖 ide 的编码检测 你要优化
    Osk
        4
    Osk  
    OP
       2019-04-07 13:04:19 +08:00
    @herozzm 没办法优化, 有些文件他就必须是 GB18030 的, 不然我直接全局 UTF-8 了
    sonyxperia
        5
    sonyxperia  
       2019-04-07 13:05:31 +08:00
    都是自己手动的……
    QNLvw5fLfr7c
        6
    QNLvw5fLfr7c  
       2019-04-07 13:28:01 +08:00 via Android
    应该没有好的避免方法,因为文件头不含编码信息。一堆英文中几句中文注释这种我觉得比较难检测出来。
    可能的替代:如果 vscode 能支持魔法注释会好一点,比如这个 issue: https://github.com/Microsoft/vscode/issues/36230
    boris1993
        7
    boris1993  
       2019-04-07 13:42:51 +08:00 via Android
    如果可以的话,从源头解决,固定使用 UTF-8,以前的文件逐步改编码

    如果你说了不算,找项目经理反映
    josephpei
        8
    josephpei  
       2019-04-07 13:46:59 +08:00 via Android
    https://editorconfig.org/
    每个项目根目录写一个配置文件,指定编码,换行符,缩进方式,可用通配符设置不同文件不同设置,编辑器打开这个目录内的文件,自动修改自身设置
    SoloCompany
        9
    SoloCompany  
       2019-04-07 13:55:44 +08:00
    那些推荐 editorconfig 的, 麻烦先看一下这个 issue 吧

    https://github.com/editorconfig/editorconfig-jetbrains/issues/58
    dacapoday
        10
    dacapoday  
       2019-04-07 14:04:57 +08:00
    VS Code 这些现代编辑器 不善于应对 文件编码混用这种古代开发习惯。
    要么每次手动换编码,要么统一项目中所有文件的编码。
    事实上从一开始就不该混用,要么维持古代的 GB18030,要么全部升级到 UTF-8。
    Nasei
        11
    Nasei  
       2019-04-07 14:48:14 +08:00
    @Osk 我挺好奇必须是 gb18030 的情况, 能说一下吗? 我以前也遇到过类似的遗留代码, 是利用 c 字符串的编码做了一些事情
    Osk
        12
    Osk  
    OP
       2019-04-07 15:30:36 +08:00
    @Nasei cp936 环境下的 Windows .cmd 脚本: 来一句 `echo 你好`

    ANSI (GB18030): 正常处理中文
    记事本的 Unicode: 卒.
    UTF-8 有 BOM/没 BOM: 卒.
    Osk
        13
    Osk  
    OP
       2019-04-07 15:34:50 +08:00
    @maokwen 希望有 fallback encoding 这个功能, 或者根据用户配置的编码列表来猜.

    @boris1993 自己的一些文件, 新一点的工具统一 UTF-8 自然是没问题的.

    @josephpei 现在就是类似这样的, 每一个新建的工作区都要去调一下设置. 或者复制 .vscode/setting.json 文件.
    abcdxe2v
        14
    abcdxe2v  
       293 天前
    发现这个编码不好自动检测,同样的 E4B896 ,utf-8 是世,UTF-16LE 是룤,GB18030 是涓
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   973 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.