UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position ... 问题解决办法之一

news/2024/7/5 18:55:21

问题描述

Windows下使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到下面问题:

UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position … 

解决办法

网络数据流写入文件时,我们会遇到几个编码:

  • #encoding=’XXX’(Python文件第一行的内容)的编码是指该Python脚本文件本身的编码,无关紧要。只要XXX和文件本身的编码相同就行了。 比如notepad++ “格式”菜单里面里可以设置各种编码,这时需要保证该菜单里设置的编码和encoding='XXX'相同就行了,不同的话会报错

  • 网络数据流的编码(比如获取网页),那么网络数据流的编码就是网页的编码。需要使用decode解码成unicode编码

  • 目标文件的编码要将网络数据流的编码写入到新文件,那么我么需要指定新文件的编码。写文件代码如:

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')

至此,问题将不复存在。


http://www.niftyadmin.cn/n/2752953.html

相关文章

【并查集】【P1525】关押罪犯

传送门 Description Input Output Sample Input 4 6 1 4 2534 2 3 3512 1 2 28351 1 3 6618 2 4 1805 3 4 12884 Sample Output 3512 Hint Solution 非常显然的并查集题目,在本题中,对于每个罪犯i,维护两个信息:必须要和他关在一起…

Python 十进制转换为二进制 高位补零

这里需要使用内置函数.format() 高位补零 >>> a 2 >>> b {:08b}.format(a)输出结果为八位二进制,且高位补零。 高位不补零 >>> b {:8b}.format(a)输出结果为八位二进制,但是高位不补零。 需要注意的是,输…

全局过滤器filter的用法

**1.**注册在全局的fliter (1)全局方法 Vue.filter() 注册一个自定义过滤器,必须放在Vue实例化前面 (2) 过滤器函数始终以表达式的值作为第一个参数。带引号的参数视为字符串,而不带引号的参数按表达式计算 (3)可以设置两个过滤器参数,前提是这两个过滤器处理的不冲…

在Maven上Web项目添加Spring框架

1. pom.xml添加Spring依赖包 <!-- spring 核心依赖--><!-- context依赖beans,aop,core,expression;core依赖logging;所以一次导入6个包--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId&…

Ubuntu下 DevToolsActivePort file doesn't exist 错误

错误描述 Ubuntu下运行一个selenium调用无头chrome浏览器进行爬取的Python程序报出如下的错误&#xff1a; (unknown error: DevToolsActivePort file doesnt exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDri…

LOW逼三人组(一)----冒泡算法

排序 1、冒泡排序 冒泡算法 import random # 随机模块 def bubble_sort(li): ###################################冒泡排序#####################################for i in range(len(li)-1): # 多少趟for j in range(len(li)-i-1): #一趟里多少次if li[j]>li…

浏览器输入URL回车会发生什么

这是一个非常经典的面试题,这道题没有具体的答案,它涉及很多的知识点&#xff0c;面试官会通过这道题了解你对哪一方面的知识比较擅长&#xff0c; 然后继续追问看看你的掌握程度。当然我写的这些也只是我的一些简单的理解&#xff0c;从前端的角度出发&#xff0c;我觉得首先回…

Redis:WRONGTYPE Operation against a key holding the wrong kind of value

错误信息 redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value分析 当前程序中key的操作类型&#xff0c;并不与redis库中存在的key的类型相匹配。 举例&#xff1a; 第一次保存key&#xff0c;将其设…