python笔记6-%u60A0和u60a0类似unicode解码

Posted 上海-悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python笔记6-%u60A0和u60a0类似unicode解码相关的知识,希望对你有一定的参考价值。

前言

有时候从接口的返回值里面获取到的是类似"%u4E0A%u6D77%u60A0%u60A0"这种格式的编码,不是python里面的unicode编码。

python里面的unicode编码应该是这种格式:\\u4e0a\\u6d77\\u60a0\\u60a0

unicode编码-python2

1.先看下python的unicode编码:\\u60a0,这个是\\u开头的,里面的英文是小写

# coding:utf-8

# 前面加u可以直接打印中文
a = u"\\u4e0a\\u6d77\\u60a0\\u60a0"
print(a)

# 字符串需decode成默认unicode编码
b = r"\\u4e0a\\u6d77\\u60a0\\u60a0"
print(b.decode("unicode_escape"))

2.如果在字符串前面加个u,意思是转化成unicode编码,如果获取到的是应该字符串原型,那就需要decode解码成unicode编码,python里面默认的unicode编码名称是unicode_escape

替换%-python2

1.如果是这种带%的编码,先替换成,这样就是unicode编码了,虽然里面的英文字符是大小,还好这里不区分大小写。

# coding:utf-8

c = "%u4E0A%u6D77%u60A0%u60A0"

# 解决办法一:替换%
d = c.replace("%", "\\\\")
print(d.decode(\'unicode_escape\'))

解决办法二:unichr

1.先切割成单个字符,再用unichr转换成中文,再连成字符串,这个有点复杂了

# coding:utf-8
def switch_to_ch(f):
    \'\'\'转换成中文\'\'\'
    g = f.split("%u")[1:]
    h = [\'\'+unichr(int(i, 16)) for i in g]
    return "".join(h)

if __name__ == "__main__":
    f = "%u4e0a%u6d77%u60a0%u60a0"
    ch = switch_to_ch(f)
    print(ch)

python3解码

1.python3默认的编码就是unicode,这个跟python2还不太一样,如果直接给字符串decode会报错:AttributeError: \'str\' object has no attribute \'ecode\'

2.python3先encode成utf-8编码,再decode成默认的unicode就可以了

3.代码参考

# coding:utf-8

c = "%u4E0A%u6D77%u60A0%u60A0"
# python3解决办法:替换%
d = c.replace("%", "\\\\")
print(d.encode("utf-8").decode("unicode_escape"))

python自动化交流 QQ群:779429633

以上是关于python笔记6-%u60A0和u60a0类似unicode解码的主要内容,如果未能解决你的问题,请参考以下文章

python 爬虫爬取内容时, xa0 u00A0,u0020, u3000 的含义与处理方法

[教程]-三种空格unicode(u00A0,u0020,u3000)表示的区别

python学习笔记

Unicode编码问题 如:u529eu7406u9996u6c7du52a0u6cb9

GraphQLError:语法错误:无法解析意外字符“\u00A0”

Apache POI 异常空白(已解决:\u00A0 不间断空格)