【Python】报错UnicodeEncodeError;编码

本文介绍了Unicode和UTF-8编码在Python中的应用。Unicode是统一字符编码,包含全球多种语言的符号,而UTF-8是其变长编码形式,节省存储空间。在Python3中,字符串默认采用Unicode编码。在处理文件和网络数据流时,需要注意编码转换,否则可能出现UnicodeEncodeError。解决中文乱码问题通常需要确保文件保存为UTF-8格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 1 美国首先出台ASCII编码,使用7个比特位(最多表示128位):英文字母、数字再加上其他常用符号,一个字节中被剩下的那个比特位就被默认为0。
  • 2 这套编码表传入欧洲,使用一个全字节(8个比特位)进行编码,最多可表示256位:多出来的一位从状态128到255这一段的解释:例如法语字母上面还有注音符,135在法语,希伯来语,俄语编码中完全是不同的符号。
  • 3 中国重写了一张编码表,也就是GB2312,它用2个字节(16个比特位)来表示绝大部分(65535个)常用汉字。后来,为了能显示更多的中文,又出台了GBK标准。不仅中国,其他国家也都搞出自己的一套编码标准:例如日本。
  • 4 为了沟通的便利, Unicode(万国码)【内存编码的规范】 应运而生,这套编码表将世界上所有的符号(字符:‘1’, ‘中’, ‘a’, ‘$’, ‘¥’ )都纳入其中。每个符号都有一个独一无二的编码,现在Unicode可以容纳100多万个符号,所有语言都可以互通,一个网页上也可以显示多国语言。包括英文,也要跟着占2个字节,ASCII码前补8个0。
  • 5 为不浪费计算机空间存储,提出:UTF-8(8-bit Unicode Transformation Format)【如何保存和传输Unicode的手段】。它是一种针对Unicode的可变长度字符编码,它可以使用1~4个字节(字节是计算机中存储数据的单元,一个8位的二进制数)表示一个符号,根据不同的符号而变化字节长度,而当字符在ASCII码的范围时,就用一个字节表示,所以UTF-8还可以兼容ASCII编码。

在Python3当中,程序处理我们输入的字符串,是默认使用Unicode编码的,所以你什么语言都可以输入。
第1,数据在硬盘上存储,或者是在网络上传输时,用的是UTF-8,因为节省空间。但你不必操心如何转换UTF-8和Unicode,当我们点击保存的时候,程序已经“默默地”帮我们做好了编码工作。
第2,一些中文的文件和中文网站,还在使用GBK,和GB2312

https://blog.youkuaiyun.com/mp624183768/article/details/79234833
网络数据流的编码 比如获取网页,那么网络数据流的编码就是网页的编码。需要使用decode解码成unicode编码。
目标文件的编码 要将网络数据流的编码写入到新文件,这需要指定新文件的编码。
在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。

txt中文出现乱码情况解决:
在保存文件时设置格式:utf-8-sig

t = open('/.../xxx.txt','r',encoding='utf-8 sig')

##保存时编码: ##
print(‘吴枫’.encode(‘utf-8’))
#b’\xe5\x90\xb4\xe6\x9e\xab’
print(‘吴枫’.encode(‘gbk’))
#b’\xce\xe2\xb7\xe3’

##阅读时解码: ##
print(b’\xe5\x90\xb4\xe6\x9e\xab’.decode(‘utf-8’))
#吴枫
print(b’\xce\xe2\xb7\xe3’.decode(‘gbk’))
#吴枫

编码后结果最前面都有一个字母b,比如b’\xce\xe2\xb7\xe3’,这代表它是bytes(字节)类型的数据print(type(b’\xce\xe2\xb7\xe3’)) #<class ‘bytes’>
\x是Python中分隔符,用来分隔一个字节和另一个字节。
网址里面的%,是替换了Python中的\x的分隔符。
————————————————————————————————————————

XR代码

filename_my = '/Users/windows/kkb/01movie_commentstrain.csv'
import pandas as pd
content = pd.read_csv(filename_my)#, encoding='gb18030')
articles = content['comment'].tolist()

import re #正则表达式
def token(string):
    return re.findall('\w+', string) #将所有单词找出来
#''.join(token(articles[110]))
#纯文字了 纯文本之后再jieba分词就不会统计符号数量
articles_clean = [''.join(token(str(a)))for a in articles]   ##
with open('article_261497.txt', 'w',encoding='utf-8 sig') as f:  #写入并保存
    for a in articles_clean:
        f.write(a + '\n')

UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\u0e51’ in
position 7: illegal multibyte sequence
修改这一行:
with open(‘article_261497.txt’, ‘w’,encoding=‘utf-8 sig’) as f: #写入并保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值