python读取文件时出现多余的ufeff时的解决方法及原因

摘要:
当使用python读取文件时,打印结果意外地有一个额外的ufeff,如图所示:如何解决这个问题?事实上,将encoding='utf-8'更改为encoding='utf-8-sig'非常简单,如图所示:问题解决了,但原因是什么?它通常用于指示文件以UTF-8、UTF-16或UTF-32编码。

当使用python读取文件后打印结果意外多出了一个ufeff,如图:

python读取文件时出现多余的ufeff时的解决方法及原因第1张

那要如何解决呢?其实也很简单只要将encoding = 'utf-8' 改成encoding = 'UTF-8-sig'就搞定了,如图:

python读取文件时出现多余的ufeff时的解决方法及原因第2张

问题是解决了,但是这到底是什么原因呢?

答:在编写文本时保存时包含了BOM(Byte Order Mark,字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码)导致最后输出了ufeff。

2、utf-8与utf-8-sig两种编码格式有什么区别呢?

答:UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一様的,没有字节序的问题,也因此它实际上并不需要BOM(“ByteOrder Mark”)。但是UTF-8 with BOM即utf-8-sig需要提供BOM。

3、ufeff到底是什么?

答:字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。

它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。

免责声明:文章转载自《python读取文件时出现多余的ufeff时的解决方法及原因》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gulp使用笔记uni使用new image()获取图片信息报错下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python读写文件之换行符

系统的换行符和路径分隔符 os模块可以获取当前系统的换行符和路径分隔符 windows操作系统 >>> os.linesep ' ' >>> os.sep '\' linux操作系统 >>> import os >>> os.linesep #换行符 ' ' >...

python接口自动化测试

(1)环境准备: 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的进行选择,甚至当工具不太适合项目时需要自己进行开发。 在我们项目的初期,我们采用的是jmeter进行接口测试,当时觉得这个工具上手简单,团队成员学习成本低,...

python json数据的转换

1  Python数据转json字符串   import json   json_str = json.dumps(py_data) 参数解析:   json_str = json.dumps(py_data,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_asc...

使用原生 python 造轮子搭建博客

这篇用来 记录一个 从零开始的 博客搭建,希望坚持下去,因为python 开发效率令人发指,所以会原生从零写 ORM ,Web 框架 前提是打好 异步 io 的基础, 使用异步,有一点要谨记,一旦开始异步,层层异步,从 http 到 数据库层都要用异步框架写异步函数,所谓开弓没有回头箭 # -*- coding: utf-8 -*- import asy...

PySide教程:一个简单的点击按钮示例 狼人:

在这篇文章里,我们将为你展示如何使用PySide使用信号、槽机制。基本来说,这是Qt提供给你的允许一个图形控件与其他图形控件或者python代码进行通讯的特性。 我们将要创建一个应用,你点击应用中的按钮后将在Python终端里显示"Hello World"字样。 下面让我们引入必要的Qt类以及python sys类。 importsysfromPySi...

python新建txt文件,并逐行写入数据

#coding=utf-8txtName = "codingWord.txt"f=file(txtName, "a+")for i in range(1,100): if i % 2 == 0: new_context = "C++" + ' ' f.write(new_context) else:...