Python处理Windows记事本utf8编码文件要注意的坑

2020-04-03 17:15:10 浏览数 (1)

以Win 10为例,假设当前文件夹中有个ANSI编码的文本文件data.txt,其中包含若干行文本,每行存放一个整数,例如:

编写程序读取其中的每行数字,加5之后输出,代码如下:

接下来,使用记事本打开文件data.txt,然后另存为UTF8编码格式,

然后修改代码,使用UTF8编码格式,代码出错,

根据异常信息可以发现,莫名其妙多出来一个字符,ufeff,然而输出文件内容时却又没有这个符号,例如,

出现这个错误的原因在于,Windows系统的记事本程序转换为UTF8时,会在文件头增加BOM(Byte Order Mark),也就是标志位ufeff,这个符号使用print()输出时不可见,使用repr()函数转换一下,

Windows记事本转换为UTF8编码时加BOM本身并没有对与错,但是没有明确说明就不合适了,还是notepad 人性化一些,明确对不带BOM的utf8和带BOM的utf8做了区分,例如,

不管怎么样,明白了原因之后,处理就容易了,可以手动删除这个符号,

或者,改用utf-8-sig编码格式来读取内容,

0 人点赞