最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【聚看点】Python处理Unicode字符时出现中文乱码的情况

来源:博客园


(资料图片仅供参考)

Unicode字符时出现中文乱码

遇见\u开头的编码,如\u0032\u0030\u0031\u0039\u002D\u0031\u0031即为Unicode字符例:\u003C 相当于<, \u003E相当于>python3中最常用的转换方式是

# -*- coding: utf-8 -*-# @Time    : 2023/3/15 17:09# @Author  : 红后# @Email   : not_enabled@163.com# @blog    : https://www.cnblogs.com/Red-Sun# @File    : 实例1.py# @Software: PyCharmstr1 = "\u4f60\u597d"# python3中只能先编码再解码,python2的话可以直接解码print(str1.encode("unicode-escape").decode("unicode-escape"))

可如果先经过中文格式编码(UTF-8)再获取Unicode解码的话就会出现中文字符变成混乱符号的情况

# -*- coding: utf-8 -*-# @Time    : 2023/3/15 17:09# @Author  : 红后# @Email   : not_enabled@163.com# @blog    : https://www.cnblogs.com/Red-Sun# @File    : 实例2.py# @Software: PyCharmstr1 = "\u4f60\u597d"# python3中只能先编码再解码,python2的话可以直接解码print(str1.encode("unicode-escape").decode("unicode-escape"))print(str1.encode("utf-8").decode("unicode-escape"))

原因:

当对字符串进行编码后,要对其解码变回中文,这是坑就来了,默认先转的中文识别的是gbk格式这才导致我们得到了乱码而不是我们想要的值。

解决方法:

通过raw_unicode_escape,将此str转化为bytes, 再decode为str。从而规避直接转中文导致格式变成gbk的坑

# -*- coding: utf-8 -*-# @Time    : 2023/3/15 17:27# @Author  : 红后# @Email   : not_enabled@163.com# @blog    : https://www.cnblogs.com/Red-Sun# @File    : 实例3.py# @Software: PyCharmstr1 = "\u4f60\u597d"# python3中只能先编码再解码,python2的话可以直接解码print(str1.encode("unicode-escape").decode("unicode-escape"))print(str1.encode("raw_unicode_escape").decode("unicode-escape"))

实际应用场景

个人遇见这个问题是在访问一个html页面后,返回给我的是Unicode格式并带中文的标签内容,这时候我就需要将返回过来的内容转换成正常的html标签格式,再从里面获取我需要的标签。PS:个人遇见的一个内容都是用document.write渲染的页面踩的这个坑将字符串用utf-8编码再用unicode-escape解码会导致如下情况str1.encode("utf-8").decode("unicode-escape")现在打印:// 隐藏备案信息展示正常情况:// 隐藏备案信息展示其中的中文字符都出现该问题,就可以用到上述方法解决。

关键词: