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

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

  •  
  •   rebeccaMyKid · 2018-05-22 16:22:26 +08:00 · 2998 次点击
    这是一个创建于 2410 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    [1] https://zh.wikipedia.org/wiki/位元組順序記號
    rebeccaMyKid
        15
    rebeccaMyKid  
    OP
       2018-06-05 11:22:55 +08:00
    @realwangyibo
    我没有删除 BOM,我是用 Excel 自己的保存为 csv utf-8 格式的,打开二进制查看是有 BOM 的。
    这是 mysql workbench 的一个 bug,已经提交并且被工作人员确认了。可能纯命令行没有这个问题吧。我不知道,我已经转用 navicat 了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2434 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:06 · PVG 00:06 · LAX 08:06 · JFK 11:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.