>>> from env_helper import info; info()
页面更新时间: 2024-01-23 21:49:24
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-17-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
9.2. Python3解码utf-8 escape字符串¶
如果遇到 ‘\xe4xb8xadxe5x9bxbd’ 这样的utf-8 escape字符串,并且不是在代码里, 而是从别的地方获取的,无法更改,就需要特殊的解码方式。
在 Python2 中,可以直接用 decode("string_escape")
解决,但是 Python
3 中 str 类型无法 decode ,那么怎么办呢?
有两种方法,第一种来自stackoverflow
>>> s = r'\xe4\xb8\xad\xe5\x9b\xbd'
>>>
>>> c = s.encode().decode('unicode-escape').encode('raw_unicode_escape').decode('utf-8')
>>>
>>> print(c)
中国
没错,decode(‘unicode-escape’)之后,字符串实际上变成了’:raw-latex:`\xe4`:raw-latex:`\xb8`:raw-latex:`\xad`:raw-latex:`\xe5`:raw-latex:`\x`9b:raw-latex:`xbd`‘,然后就可以用常规的.encode(’raw_unicode_escape’).decode(‘utf-8’)解决
第二种方法
>>> s = r'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> eval("print('"+s+"'.encode('raw_unicode_escape').decode('utf-8'))")
>>>
>>> #写成函数
>>> def getUtf8Escape(s):
>>> return eval("'"+s + "'.encode('raw_unicode_escape').decode('utf-8')")
>>>
>>> print(getUtf8Escape(s))
你好
你好
复制代码 简单粗暴的方法,但确实有效
顺带一提,如果是Unicode的escape字符串,或者没有转义的utf-8,其实很简单
Unicode明文
>>> a = r'\u8bf7'
>>> b = a.encode().decode("unicode_escape")
>>> print(b)
请
>>> #utf-8
>>> a = '\xe4\xbd\xa0\xe5\xa5\xbd'
>>> b = a.encode('raw_unicode_escape').decode('utf-8')
>>> b
'你好'