python 字符串编码 ,区别 utf-8 和utf-8-sig
Python 读取文件首行多了"\ufeff"字符串
python读取B.txt文件时,控制台打印首行正常,但是若是用首行内容打开文本的话,就会报错:
1 2 3 4 5 | 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"即可 如下:
1 2 3 4 5 6 7 | 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix