Python-解决字符串编码UnicodeEncodeError错误

Posted 南方的墙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-解决字符串编码UnicodeEncodeError错误相关的知识,希望对你有一定的参考价值。

 

data_results="123456789\\u93b4\\u612c\\u59db \\u2022"

#将字符串转换为字节序列:使用encode方法将字符串转换为字节序列,并指定编码格式为utf-8
print(data_results.encode(\'utf-8\'))

#使用encode方法将字符串转换为字节序列,并指定编码格式为gbk,使用ignore参数忽略无法处理的字符
print(data_results.encode(\'gbk\', \'ignore\'))

#将字节序列转换为字符串:使用decode方法将字节序列转换为字符串,并指定编码格式为utf-8
print(data_results.encode(\'utf-8\').decode(\'utf-8\'))


#在输出时指定编码格式为gbk:如果仍然出现UnicodeEncodeError错误,可以将输出的字符串转换为gbk编码格式,并忽略无法处理的字符
print(data_results.encode(\'utf-8\').decode(\'utf-8\').encode(\'gbk\', \'ignore\').decode(\'gbk\'))

 

读《Python3 是如何解决棘手的字符编码问题的》的笔记

对于Python的编码值得注意的是不同的版本编码方式是不同的。Python3默认的是utf-8而Python2则是ASCll,因此对不同的版本对于UnicodeEncodeError和UnicodeDecodeError的处理也是不一样的!因此对于decode()和encode()的理解和使用也是不一样的!但是两个函数的使用原理是一样的!decode()就是将字节解码成字符,encode()则是相反!值得注意的是字节方便存储和网络传输,而字符用于显示。

对于Python3的编码总结:文本字符全部用 str 类型表示,str 能表示 Unicode 字符集中所有字符,而二进制字节数据用一种全新的数据类型,用 bytes 来表示。在字符引号前面就可以表示这是字节表示的对象。但是这里的局限性就是不嫩能够表示中文。

一图明了:

技术分享

该python2上场的时候了:

Python2默认的是ASCLL,str表示的字节而Unicode表示的是字符。我们要把 unicode 符号保存到文件或者传输到网络就需要经过编码处理转换成 str 类型,于是 python 提供了 encode 方法,从 unicode 转换到 str。两者转换的关系如下:

技术分享

注意的问题

文件的读写:

write:判断将要写入的是什么类型,如果是字节的话就直接写入,如果是字符的话那么它会先调用 encode 方法把 unicode 字符串转换成二进制形式的 str 类型,才保存到文件,而 encode 方法会使用 python 默认的 ascii 码来编码。

 

以上是关于Python-解决字符串编码UnicodeEncodeError错误的主要内容,如果未能解决你的问题,请参考以下文章

读《Python3 是如何解决棘手的字符编码问题的》的笔记

Python-解决字符串编码UnicodeEncodeError错误

python输出到文件乱码如何解决

python3 中的Json序列化反序列化 和 字符编码的问题解决

url编码问题在python中怎么解决

python 编码问题解决方案