V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
rebeccaMyKid

window 下 excel csv 的默认编码是随系统的

  •  
  •   rebeccaMyKid · May 22, 2018 · 3361 views
    This topic created in 2897 days ago, the information mentioned may be changed or developed.

    用的 office 365,系统语言是中文,如果保存为 csv (不是 utf8 )的话,默认编码是 GB2312 (跟随系统)。好像没什么人讨论这个,都是问怎么用某种 encoding 打开 csv 的。是不是大家都知道这个,是我火星了吗?

    还有人说要向微软提要求,要可以选择多种编码方式,其实不提供也能理解,一般情况下肯定跟同语言的人交换文档,你要跨语言的话,utf8 咯。

    15 replies    2018-06-05 11:22:55 +08:00
    dalieba
        1
    dalieba  
       May 22, 2018 via Android
    用 UTF8 时候要是加 BOM 会更好
    rebeccaMyKid
        2
    rebeccaMyKid  
    OP
       May 22, 2018
    @dalieba
    额,暂时不了解 BOM 是什么,但不是说无 BOM 更好吗。excel 的 utf8 好像是有 BOM 的。
    MeteorCat
        3
    MeteorCat  
       May 22, 2018   ❤️ 1
    这种坑点遇到过,因为当时是我自己系统是英文版本的,测试没问题但是后来提交到测试服务器发现这个问题,后来发现就是因为中文的编码,也是 office365;

    后来我直接获取 HTTP 的`accept-language`头信息判断是否带有中文环境,如果有中文设置就直接 iconv 转化 GB2312

    不清楚现在有没有更好的处理方法,战略马克一下看看其他人的设置
    dalieba
        4
    dalieba  
       May 22, 2018 via Android
    @rebeccaMyKid BOM 是 Byte Order Mark 的缩写,用来让软件直接识别出编码。这种文档有 BOM 的话跨语言交换的时候会更有优势。
    realwangyibo
        5
    realwangyibo  
       May 22, 2018 via iPhone
    @dalieba utf8 没有字节序问题,微软优先考虑自家系统兼容性,便只有加了 BOM 才能正确识别。
    rebeccaMyKid
        6
    rebeccaMyKid  
    OP
       May 22, 2018 via Android
    @MeteorCat 你的经历描述得不明不白的,但我想知道,你英文的系统语言,excel 存中文再打开是乱码吧?
    zjyl1994
        7
    zjyl1994  
       May 22, 2018
    一般来说写程序导出 utf8 的 csv 都会加入 BOM,这样打开就不乱码了,不知道对你有帮助没有
    rebeccaMyKid
        8
    rebeccaMyKid  
    OP
       May 22, 2018
    @zjyl1994
    嗯,我刚看了一下,BOM 好像是 window 搞的,我写程序还得去掉这个 bom,不然 bom 被识别为数据。
    rebeccaMyKid
        9
    rebeccaMyKid  
    OP
       May 22, 2018
    @realwangyibo
    看了一下好像是 windows 下才有的,好奇如果自己写程序删掉 BOM 会发生什么?难道就识别不出来了?如果软件能给我强制选择编码的话,能识别出来吗?
    rebeccaMyKid
        10
    rebeccaMyKid  
    OP
       May 22, 2018
    强制选择解码的编码
    imn1
        11
    imn1  
       May 22, 2018
    用 bom 的话,csv 给其他软件读取可能是另一个坑,因为 bom 是微软发明的(好象是?)
    rebeccaMyKid
        12
    rebeccaMyKid  
    OP
       May 22, 2018
    @imn1
    好像是 windows 发明的。其他软件如果是 windows 下的应该主动要做好这个吧。python 打开文件的话有一个参数,encoding 填 `utf_8_sig` ,就好了。
    zjyl1994
        13
    zjyl1994  
       May 23, 2018
    @rebeccaMyKid 是这样的,看你 csv 给谁用。给程序用就不用加了,给用 excel 的普通人用还是加上好,免得到时候问你为啥打开乱码了。
    realwangyibo
        14
    realwangyibo  
       Jun 4, 2018
    @rebeccaMyKid 自己写程序删除 BOM 就会类似出现[1]所举例的问题,windows 下如果没有 BOM 就会按照默认编码读取,就可能出现乱码。

    [1] https://zh.wikipedia.org/wiki/位元組順序記號
    rebeccaMyKid
        15
    rebeccaMyKid  
    OP
       Jun 5, 2018
    @realwangyibo
    我没有删除 BOM,我是用 Excel 自己的保存为 csv utf-8 格式的,打开二进制查看是有 BOM 的。
    这是 mysql workbench 的一个 bug,已经提交并且被工作人员确认了。可能纯命令行没有这个问题吧。我不知道,我已经转用 navicat 了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   946 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 21:16 · PVG 05:16 · LAX 14:16 · JFK 17:16
    ♥ Do have faith in what you're doing.