Python 读取文件首行多了"\ufeff"字符串

python读取B.txt文件时,控制台打印首行正常,但是若是用首行内容打开文本的话,就会报错:

Traceback (most recent call last):
A
File "E:/python project/multiProcess/test.py", line 32, in <module>
with open("%s.txt" % line, 'r', encoding='utf-8') as f1:
FileNotFoundError: [Errno 2] No such file or directory: '\ufeffA.txt'

  

要打开的路径比预期A.txt多了一串字符"\ufeff", 显然无法正确打开文件.

解决方案:

在读取B.txt 时,指定编码方式为 "utf-8-sig"即可 如下:

with open("B.txt", 'r', encoding='utf-8-sig') as f:
line = f.readline()[0:-1] #去掉末尾换行符
print(line)
with open("%s.txt" % line, 'r', encoding='utf-8') as f1:
print(f1.readline())
f1.close()
f.close()

  

首行出现的”\ufeff“叫BOM("ByteOrder Mark")用来声明该文件的编码信息.

”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误.

"uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8", 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果.

原文:https://blog.csdn.net/wozaizhe56/article/details/82048645

  • 摘要:问题描述:json.loads(text,encoding='utf8')报UnexpectedUTF-8BOM(decodeusingutf-8-sig)错误,将encoding改为'utf-8-sig'仍然报错。原因分析:text包含BOM字符解决方案:将BOM头去掉

  • 问题描述:

    json.loads(text,encoding='utf8') 报Unexpected UTF-8 BOM (decode using utf-8-sig)错误,将encoding改为'utf-8-sig'仍然报错。

    原因分析:

    text包含BOM字符

    解决方案:

    将BOM头去掉,代码如下:

 if text.startswith(u'/ufeff'):
text = text.encode('utf8')[3:].decode('utf8')

链接:https://www.jianshu.com/p/f94b3fc04f5b

python 字符串编码 ,区别 utf-8 和utf-8-sig的更多相关文章

  1. python字符串编码

    python默认编码 python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII. python 3.x默认的字符编码是unicode,默认的文件编码是utf-8. 中文乱码问题 无 ...

  2. Python字符串编码——Unicode

    ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是 ...

  3. python 字符串编码

    通过字符串的decode和encode方法 1 encode([encoding,[errors]]) #其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib ...

  4. 不得不知道的Python字符串编码相关的知识

    开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII character 'ascii' codec can't encode characters in posi ...

  5. python字符串编码理解(转载)

    (转载)字符编码和python使用encode,decode转换utf-8, gbk, gb2312 (http://www.cnblogs.com/jxzheng/p/5186490.html) A ...

  6. 【转载】不得不知道的Python字符串编码相关的知识

    原文地址:http://www.cnblogs.com/Xjng/p/5093905.html 开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII charact ...

  7. python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8')

  8. Python字符串编码问题

    编码问题:Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了. ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节.字母A用ASC ...

  9. Python字符串编码转换

    使用encode()方法编码 str.encode([encoding="utf-8"][,errors="strict"]) str:表示需要转换的字符串 e ...

随机推荐

  1. 使用Spring框架入门一:基于XML配置的IOC/DI的使用

    一.Spring框架 1.方法一:逐项导入基础依赖包: spring-core.spring-beans.spring-context.spring-expression 2.方法二:最简洁的导入,直 ...

  2. sqlmap检测sql注入漏洞

    sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.它由python语言开发而成,因此运行需要安装python环境. 官网:http://sqlmap.org/ 乌 ...

  3. 对2个hex(16进制)字符串进行异或操作

    private static String hexXOR(String hex1, String hex2){ BigInteger i1 = new BigInteger(hex1, 16); Bi ...

  4. exception java.lang.OutOfMemoryError: Java heap space

      1.情景展示 java内存溢出异常,将程序代码问题排除在外,如何增大JVM的使用内存? 2.解决方案  在eclipse中的解决办法:增大你要运行的测试类的内存分配. 点击运行或debug按钮旁的 ...

  5. 【DB2】SQL优化

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAA

  6. mtr网络连通性测试

    01.mtr命令 yum install -y   mtr [root@jiao ~]# mtr --helpusage: mtr [-hvrwctglspniu46] [--help] [--ver ...

  7. ArcGIS 概述

    ArcGIS产品线为用户提供一个可伸缩的,全面的GIS平台.ArcObjects包含了大量的可编程组件,从细粒度的对象(例如,单个的几何对象)到粗粒度的对象(例如与现有ArcMap文档交互的地图对象) ...

  8. 使用Dockerfile文件构建基于centOS系统的nodejs镜像

    实际示例: [root@node01 node]# ls dev-web dev-web.tar.gz Dockerfile node-v8.14.0-linux-x64.tar.gz package ...

  9. hibernate的hql语句不支持 count(case...when ....else..)?

    查看帖子:http://www.iteye.com/problems/4499 第一次这么写, 不行, 关键就是: 同是聚集函数,sum 就OK, 而 count 就不行...........后来还是 ...

  10. webservice(草稿)

    1.  概述 WebService是一种跨编程语言和跨操作系统平台的远程调用技术. Webservice是被定义用来使不同应用之间通过网络传输数据的一种标准,此标准和具体的语言无关,至于哪种语言提供接 ...