Py学习  »  Python

python将unicode代码值转换为字符串,不带“\u”

Allen • 3 年前 • 991 次点击  

在下面的代码中,

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社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131777
 
991 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Namballa Mukesh
Reply   •   1 楼
Namballa Mukesh    3 年前

你可以这样做: 可以忽略非ASCII字符并编码为ASCII,也可以编码为UTF-8

text = "\u54c8\u54c8\u54c8\u54c8"
utf8string = text.encode("utf-8")
asciistring1 = text.encode("ascii", 'ignore')
asciistring2 = text.encode("ascii", 'replace')

你可以参考 https://www.oreilly.com/library/view/python-cookbook/0596001673/ch03s18.html

AKX
Reply   •   2 楼
AKX    3 年前

您可以使用常规的列表理解来映射中的4个字符 text ,并使用 ord 得到 奥德 码点的最后一个(整数),然后 hex() 将其转换为十六进制。这个 [2:] 需要切片来去除 0x 否则Python会添加。

>>> 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,5,4,c,8”重复4次,您需要首先解码反斜杠转义序列以获得4码点字符串:

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