用的 office 365,系统语言是中文,如果保存为 csv (不是 utf8 )的话,默认编码是 GB2312 (跟随系统)。好像没什么人讨论这个,都是问怎么用某种 encoding 打开 csv 的。是不是大家都知道这个,是我火星了吗?
还有人说要向微软提要求,要可以选择多种编码方式,其实不提供也能理解,一般情况下肯定跟同语言的人交换文档,你要跨语言的话,utf8 咯。
1
dalieba 2018-05-22 18:09:39 +08:00 via Android
用 UTF8 时候要是加 BOM 会更好
|
2
rebeccaMyKid OP @dalieba
额,暂时不了解 BOM 是什么,但不是说无 BOM 更好吗。excel 的 utf8 好像是有 BOM 的。 |
3
MeteorCat 2018-05-22 18:18:32 +08:00 1
这种坑点遇到过,因为当时是我自己系统是英文版本的,测试没问题但是后来提交到测试服务器发现这个问题,后来发现就是因为中文的编码,也是 office365;
后来我直接获取 HTTP 的`accept-language`头信息判断是否带有中文环境,如果有中文设置就直接 iconv 转化 GB2312 不清楚现在有没有更好的处理方法,战略马克一下看看其他人的设置 |
4
dalieba 2018-05-22 18:26:20 +08:00 via Android
@rebeccaMyKid BOM 是 Byte Order Mark 的缩写,用来让软件直接识别出编码。这种文档有 BOM 的话跨语言交换的时候会更有优势。
|
5
realwangyibo 2018-05-22 19:01:11 +08:00 via iPhone
@dalieba utf8 没有字节序问题,微软优先考虑自家系统兼容性,便只有加了 BOM 才能正确识别。
|
6
rebeccaMyKid OP @MeteorCat 你的经历描述得不明不白的,但我想知道,你英文的系统语言,excel 存中文再打开是乱码吧?
|
7
zjyl1994 2018-05-22 21:18:46 +08:00
一般来说写程序导出 utf8 的 csv 都会加入 BOM,这样打开就不乱码了,不知道对你有帮助没有
|
8
rebeccaMyKid OP @zjyl1994
嗯,我刚看了一下,BOM 好像是 window 搞的,我写程序还得去掉这个 bom,不然 bom 被识别为数据。 |
9
rebeccaMyKid OP @realwangyibo
看了一下好像是 windows 下才有的,好奇如果自己写程序删掉 BOM 会发生什么?难道就识别不出来了?如果软件能给我强制选择编码的话,能识别出来吗? |
10
rebeccaMyKid OP 强制选择解码的编码
|
11
imn1 2018-05-22 22:53:36 +08:00
用 bom 的话,csv 给其他软件读取可能是另一个坑,因为 bom 是微软发明的(好象是?)
|
12
rebeccaMyKid OP @imn1
好像是 windows 发明的。其他软件如果是 windows 下的应该主动要做好这个吧。python 打开文件的话有一个参数,encoding 填 `utf_8_sig` ,就好了。 |
13
zjyl1994 2018-05-23 08:55:04 +08:00
@rebeccaMyKid 是这样的,看你 csv 给谁用。给程序用就不用加了,给用 excel 的普通人用还是加上好,免得到时候问你为啥打开乱码了。
|
14
realwangyibo 2018-06-04 21:11:12 +08:00
@rebeccaMyKid 自己写程序删除 BOM 就会类似出现[1]所举例的问题,windows 下如果没有 BOM 就会按照默认编码读取,就可能出现乱码。
[1] https://zh.wikipedia.org/wiki/位元組順序記號 |
15
rebeccaMyKid OP @realwangyibo
我没有删除 BOM,我是用 Excel 自己的保存为 csv utf-8 格式的,打开二进制查看是有 BOM 的。 这是 mysql workbench 的一个 bug,已经提交并且被工作人员确认了。可能纯命令行没有这个问题吧。我不知道,我已经转用 navicat 了。 |