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

2018-05-22 16:22:26 +08:00
 rebeccaMyKid

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

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

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

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

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

[1] https://zh.wikipedia.org/wiki/位元組順序記號
rebeccaMyKid
2018-06-05 11:22:55 +08:00
@realwangyibo
我没有删除 BOM,我是用 Excel 自己的保存为 csv utf-8 格式的,打开二进制查看是有 BOM 的。
这是 mysql workbench 的一个 bug,已经提交并且被工作人员确认了。可能纯命令行没有这个问题吧。我不知道,我已经转用 navicat 了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456859

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX