python 字符串编码 ,区别 utf-8 和utf-8-sig

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

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

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", 显然没法正确打开文件.json

解决方案:

在读取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")用来声明该文件的编码信息.spa

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

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

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

 

 

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

  • 问题描述:utf-8

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

    缘由分析:string

    text包含BOM字符

    解决方案:

    将BOM头去掉,代码以下:

if text.startswith(u'/ufeff'): text = text.encode('utf8')[3:].decode('utf8')
连接:https://www.jianshu.com/p/f94b3fc04f5b
相关文章
相关标签/搜索