在Python 3.8.2 中,如何将包含'\uxxxx' 序列的字符串转换为utf-8?
In Python 3.8.2, how do I convert a string that contains a '\uxxxx' sequence into utf-8?
我有一个 Python 字符串,其中包含以下内容:it\u2019s
。当我打印字符串时,它显示为 it\u2019s
。 \u2019
表示 unicode 右单引号,此处用作 "it's".
中的撇号
我想将 \u2019
更改为实际的 unicode 字符,但我受阻了。我 发现我可以使用 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 转义序列。
最理想的情况是,我建议您首先尝试确保输入中的 \
未被转义,但如果这不可能,则可以使用正则表达式替换(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)
我有一个 Python 字符串,其中包含以下内容:it\u2019s
。当我打印字符串时,它显示为 it\u2019s
。 \u2019
表示 unicode 右单引号,此处用作 "it's".
我想将 \u2019
更改为实际的 unicode 字符,但我受阻了。我 发现我可以使用 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 转义序列。
最理想的情况是,我建议您首先尝试确保输入中的 \
未被转义,但如果这不可能,则可以使用正则表达式替换(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)