Python编码解码中的乱码问题怎么办

Admin 2022-08-26 群英技术资讯 349 次浏览

这篇文章主要介绍“Python编码解码中的乱码问题怎么办”的相关知识,下面会通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python编码解码中的乱码问题怎么办”文章能帮助大家解决问题。

编码和解码及\x和\u问题

“字符在内存里的表示是unicode,如果要存盘或者发到网络就经过utf-8,然后对端收到依次解码。”

Python 3里面,str在内存里是unicode表示的

‘中文’ == ‘\u4e2d\u6587’

'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
 '\u4e2d\u6587'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

1个汉字用unicode表示一般是2个byte,

例如:

‘中’=\u4e2d(十六进制写法【即2bytes】)

'A'.encode('ascii')
>>>b'A'
('\u0041').encode('ascii')
>>>b'A'
'A'.encode('utf-8')
>>>b'A'

note: b’A’和’A’

在python 3中

b’A’是ascii编码的01010101的字节,占1个byte;

'A‘是在内存里按unicode形式编码的/ucc,占的是2个byte。

unicode编码后是bytes,如果这个字节范围不在ascii的表示范围内,就会显示成\x(十六进制形式)

例如:

  • 汉字编码成bytes,去查看这个bytes肯定只能看到\x系列,因为这个bytes的内容肯定不在ascii范围内;
  • 英文编码成bytes可以看到对应的英文字母,本质上它还是没有含义的010101的字节流而不是字符。
"abc".encode('utf-8')
b'abc'
'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
1个汉字,按utf-8编码,一般是3个bytes,\xe4是十六进制表示的1个byte。

相同的英文字符,ascii编码和utf-8编码的结果是一致的,因为这两种编码都使用一个byte表示一个英文字符

'abc'.encode('ascii').decode('utf-8')
'abc'

可以用一个编码然后再另一个解码,是可以成功还原的。但一般是不会这么做的。

ord函数获取字符的整数表示和chr数把编码转换为对应的字符

 ord('A')
65
ord('中')
20013
chr(66)
'B'
chr(25991)
'文'

对str和对bytes用len,意义是不同的。

len(str)统计字符数,len(bytes)统计bytes数

>>> len('中文')
2
 len(str)统计字符数
>>> bt1 = '中文'.encode('gb2312')
>>> bt2 = '中文'.encode('utf-8')
>>> bt1
b'\xd6\xd0\xce\xc4'
>>> bt2
b'\xe4\xb8\xad\xe6\x96\x87'
>>> len(bt1)
4
>>> len(bt2)
6

以Unicode表示的str通过encode()方法可以编码为指定的bytes

python解析 \x 和 \u "乱码"

参数错误

\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf  

今日已经完成过此任务,请明日再做此任务吧!

\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!

python2.7解析方法

>>> print(u'\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf  '.encode('unicode_escape').decode('string_escape')) 
>>>print('\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!'.decode('unicode_escape'))

python3解析方法

>>>('\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf  '.encode('raw_unicode_escape')).decode()
>>>'\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!'

以上就是关于“Python编码解码中的乱码问题怎么办”的相关知识,感谢各位的阅读,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
群英智防CDN,智能加速解决方案

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服