Python写入文件报错‘gbk’ codec can’t encode character的解决办法

简介: Python写入文件报错‘gbk’ codec can’t encode character的解决办法

背景

使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position ... 这个问题。 网络上有很多类似的文件讲述如何解决这个问题,但是无非就是encode,decode相关的,这是导致该问题出现的真正原因吗?不是的。 很多时候,我们使用了decode和encode,试遍了各种编码,utf8,utf-8,gbk,gb2312等等,该有的编码都试遍了,可是编译的时候仍然出现: UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position XXX。

原因

在windows下面编写python脚本,编码问题很严重。 将网络数据流写入文件时时,我们会遇到几个编码: 1: #encoding='XXX' 这里(也就是python文件第一行的内容)的编码是指该python脚本文件本身的编码,无关紧要。只要XXX和文件本身的编码相同就行了。 比如notepad++ "格式"菜单里面里可以设置各种编码,这时需要保证该菜单里设置的编码和encoding XXX相同就行了,不同的话会报错 2:网络数据流的编码 比如获取网页,那么网络数据流的编码就是网页的编码。需要使用decode解码成unicode编码。 3:目标文件的编码 要将网络数据流的编码写入到新文件,那么我么需要指定新文件的编码。

代码

写入文件代码:

f.write(txt)

那么txt是一个字符串,它是通过decode解码过的字符串。关键点就要来了:目标文件的编码是导致标题所指问题的罪魁祸首。

如果我们打开一个文件,使用如下代码:

f = open("out.html","w")

在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。

解决的办法就是,改变目标文件的编码:

f = open("out.html","w",encoding='utf-8')

这样,问题将不复存在。

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。


目录
相关文章
|
30天前
|
存储 Python
Python中如何读取和写入文件?请提供代码示例。
【2月更文挑战第26天】【2月更文挑战第87篇】Python中如何读取和写入文件?请提供代码示例。
|
1月前
|
存储 Python
Python中encode和encoding的区别
Python中encode和encoding的区别
29 0
|
1月前
|
关系型数据库 MySQL Python
python安装MySQL-python:EnvironmentError解决办法
python安装MySQL-python:EnvironmentError解决办法
28 1
|
3月前
|
Web App开发 Python
Python使用selenium的Chrome下载文件报错解决
Python使用selenium的Chrome下载文件报错解决
46 0
|
2月前
|
安全 网络安全 API
python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error
python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error
70 1
python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error
|
1月前
|
Python
在Python中读取和写入文件
在Python中读取和写入文件
15 1
|
1月前
|
JSON 数据格式 Python
python 写入文件的中文乱码了怎么处理
如果在写入JSON文件时遇到中文乱码问题,你可以在使用`json.dump()`函数时设置`ensure_ascii`参数为`False`,以保留非ASCII字符的原始形式。这样可以确保中文字符正确地写入JSON文件。 以下是一个示例: ```python import json data = {"name": "张三", "age": 30, "city": "北京"} with open('data.json', 'w', encoding='utf-8') as file: json.dump(data, file, ensure_ascii=False) ``` 在这
|
3月前
|
存储 Shell Linux
Python 自动化指南(繁琐工作自动化)第二版:九、读取和写入文件
Python 自动化指南(繁琐工作自动化)第二版:九、读取和写入文件
47 0
|
6天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
6天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。