【文本处理】无法解析的CSV文件

今天写了一个Python读取CSV文件的程序。自己测试完全没有问题,给同事去用却没能正确处理文件的内容。同事用Excel打开CSV查了好半天,然后把问题打回给我。

读取了该文件的内容一查,果然这是一个BOM文件。BOM:是Byte Order Mark的缩写。这是一个多字节的Unicode字符(Unicode有多种标准,有些标准里一个字符的长度是不固定的),这个字符用来指明:

  • 该字节流使用了Unicode
  • 这个字节流使用的Unicode编码是什么
  • 这个字节流在传输中用的字节序(大小头)是什么
Unicode编码BOM(十六进制)BOM(十进制)
UTF-8EF BB BF239 187 191
UTF-16 (BE)FE FF254 255
UTF-16 (LE)FF FE255 254
UTF-32 (BE)00 00 FE FF0 0 254 255
UTF-32 (LE)FF FE 00 00255 254 0 0
UTF-72B 2F 7643 47 118
UTF-1F7 64 4C247 100 76
UTF-EBCDICDD 73 66 73221 115 102 115
SCSU0E FE FF14 254 255
BOCU-1FB EE 28251 238 40
GB1803084 31 95 33132 49 149 51

BOM在Unicode文件中是可选的,而且在很多系统中是不建议的。文本处理程序在按照字节读取文件内容的时候如果没有正确处理BOM就会产生错误。另外,BOM在某些编辑器中是不可见的(如Windows的记事本),因此你可能在查找问题的时候还看不到它。

还遇到过的一个问题:在文本文件的拼接和嵌入时没有处理好BOM,造成了拼接后的文件中间(不是文件开头)出现了异常字符,影响了显示结果。

如过你处理的文本来自不同的系统,请注意编码问题和BOM字符的过滤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值