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

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

Traceback (most recent call last):
A
File “E:/python project/multiProcess/test.py”, line 32, in
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单独处理,与文本内容隔离开,也是我们期望的结果.

摘要:问题描述: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://blog.csdn.net/wozaizhe56/article/details/82048645

`utf-8-sig` 是一种带有 BOM(字节顺序标记)的 UTF-8 编码方式,BOM 是一个特殊的字节序列,用于指示文本文件中使用的编码方式。在某些应用程序中,BOM 可以帮助正确识别文本文件的编码方式。 在 Python 中,您可以使用 `utf-8-sig` 编码来打开和写入带有 BOM 的 UTF-8 文本文件。以下是一些示例代码,演示如何使用 `utf-8-sig` 编码来读取和写入文本文件: ```python # 读取带有 BOM 的 UTF-8 文本文件 with open("file.txt", "r", encoding="utf-8-sig") as f: content = f.read() print(content) # 写入带有 BOM 的 UTF-8 文本文件 with open("file.txt", "w", encoding="utf-8-sig") as f: f.write("Hello, world!") ``` 在这个示例中,我们首先使用 `open` 函数打开一个名为 `file.txt` 的文本文件,并指定 `encoding` 参数为 `utf-8-sig`。这将告诉 Python 使用带有 BOM 的 UTF-8 编码方式来读取或写入文件。 在第一个 `with` 语句中,我们使用 `read` 方法读取文件内容,并将其存储在变量 `content` 中。由于文件使用带有 BOM 的 UTF-8 编码方式,因此 Python 可以正确地解析文件内容,并将其作为 Unicode 字符串返回。在第二个 `with` 语句中,我们使用 `write` 方法将字符串 "Hello, world!" 写入文件。由于我们指定了 `utf-8-sig` 编码方式,因此 Python 将自动在文件开头添加一个 BOM。 需要注意的是,并非所有的文本编辑器都支持带有 BOM 的 UTF-8 编码方式。如果您在使用带有 BOM 的 UTF-8 编码方式时遇到问题,请尝试使用不带 BOM 的 UTF-8 编码方式或其他编码方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值