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

最新文章

  1. Exception in thread &quot;main&quot; java.lang.ExceptionInInitializerError
  2. Python学习路程day15
  3. UDP的坏处
  4. BZOJ3928 [Cerc2014] Outer space invaders
  5. Oracle数据库编程:在JDBC中应用Oracle
  6. UIExtendedEdge
  7. bat处理打开关门exe
  8. ExtJs007最常用的查询方法
  9. codeforces Round #259(div2) E解决报告
  10. JavaScript插件——按钮
  11. 【Egret】里使用audio标签达到默认播放背景音乐
  12. socket.io 出现的WebSocket is closed before the connection is established
  13. Ext.Net的一例Ext Undefined解决办法
  14. ioctl函数
  15. MySQL(介绍,安装,密码操作,权限表)
  16. 用mybatis做数据库处理 代码中的字段大小写 要和mapper映射设置的大小写一致(这TM不废话么,原谅我渣!~~)
  17. Linux镜像源
  18. 【C语言】 使用Beep() 函数 演奏歌曲
  19. 漫画:高并发下的HashMap
  20. Winsock解析

热门文章

  1. 禁用系统的Ctrl+Alt+Left/Right(方向键)
  2. SSH协议
  3. vue refs v-for 使用注意
  4. JSP页面跳转之sendRedirect()与forward()辨析
  5. Java ReEntrantLock (Java代码实战-001)
  6. V-rep学习笔记:Geometric Constraint Solver(几何约束求解)
  7. VREP中使用其它Lua库
  8. HttpServletRequest对象(一)
  9. Spring Cloud Edgware Release Notes
  10. weblogic静默安装指导