首页 > 解决方案 > python将unicode代码值转换为字符串,不带'\u'

问题描述

在下面的代码中,

text = "\u54c8\u54c8\u54c8\u54c8"

有没有办法将上面的 unicode 代码转换为仅保留该值,并从中删除“\u”。于是"\u54c8"就变成"54c8"了。

在 javascript 中我可以做到text.charCodeAt(n).toString(16),但我无法在 python 中找出等效的解决方案。

我尝试使用正则表达式来匹配它,

pattern = re.compile('[\u0000-\uFFFF]')

matches = pattern.finditer(text)

for match in matches:
    print(match)

但它所做的只是打印出 unicode 值所代表的字符。

标签: python

解决方案


您可以使用常规列表推导来映射 4 个字符text,并用于ord获取代码点的ord最终(整数),然后hex()将其转换为十六进制。[2:]切片是摆脱 Python 所必需的,否则0x会添加。

>>> text = "\u54c8\u54c8\u54c8\u54c8"
>>> text
'哈哈哈哈'
>>> [hex(ord(c))[2:] for c in text]
['54c8', '54c8', '54c8', '54c8']
>>>

"".join()然后,如果您需要单个字符串,您可以使用例如。

(另一种编写理解的方法是使用 f 字符串和x十六进制格式:

>>> [f'{ord(c):x}' for c in text]
['54c8', '54c8', '54c8', '54c8']

)

如果您实际上有一个字符串\u54c8\u54c8\u54c8\u54c8,即“反斜杠,u,五,四,c,八”重复4次,您需要首先解码反斜杠转义序列以获得4-codepoint字符串:

>>> text = r"\u54c8\u54c8\u54c8\u54c8"
>>> codecs.decode(text, "unicode_escape")
'哈哈哈哈'

推荐阅读