在Python 3.8.2中,如何将包含'\ uxxxx'序列的字符串转换为utf-8?

问题描述 投票:0回答:1

我有一个包含以下内容的Python字符串:it\u2019s。当我打印字符串时,它显示为it\\u2019s\u2019表示Unicode右单引号,在此用作“它的”中的撇号。

我想将\u2019更改为实际的Unicode字符,但我受阻。我have发现可以使用str.replace("\\\u2019", "\u2019")来做到这一点,但是有几公吨的unicode字符,我想要一个更通用的解决方案。

附加信息:我正在使用Windows 10,并使用python解释器进行测试。我希望这会有所帮助。

>>>s = "it\\u2019s"  # that is two backslashes is a row.
>>>print(s)
it\u2019s
>>>b = s.encode()
>>>print(b)
b'it\\u2019s'
h = b.hex(" ",1)
>>> print(h)
69 74 5c 75 32 30 31 39 73

因此十六进制为5c;那是反斜杠。反斜杠实际上是字符串的一部分,而不是python解释Unicode转义序列。

python python-3.x python-unicode
1个回答
0
投票

最佳情况下,我建议您尝试确保输入中的\首先没有转义,但如果这样不可能,则可以用正则表达式替换(s是您的原始字符串):

re.sub(r"\\u([0-9a-f]{4})", lambda m: chr(int(m.group(1), 16)), s)

\\u的出现,后跟四个小写的十六进制数字,并将它们分组在第一组中以供后面参考。将这些序列替换为与由这四个数字表示的int值相对应的字符:chr(int(m.group(1), 16)

© www.soinside.com 2019 - 2024. All rights reserved.