[英]how to convert a unicode value string to unicode in python 2.7
[英]How can I convert a unicode string into string literals in Python 2.7?
Python2.7:我想做一些與眾不同的事情。 大多數人希望將字符串文字轉換為更易讀的字符串。 我想將以下unicode字符串列表轉換為它們的文字形式:
他們的代碼點表單看起來像這樣:
\\ u3023 \\ u2344
你會注意到freø̯̯nt在ø下面有兩個倒置的短褲。 我想特別將該單詞轉換為其字面形式,以便我可以使用REGEX來刪除額外的短語。
我不確定這些東西的術語是什么 - 如果我弄錯了,請糾正我。
您可以將str.encode([encoding [,errors]])函數與unicode_escape編碼一起使用:
>>> s = u'freø̯̯nt'
>>> print(s.encode('unicode_escape'))
b'fre\\xf8\\u032f\\u032fnt'
你會注意到freø̯̯nt在ø下面有兩個倒置的短褲。 我想特別將該單詞轉換為其字面形式,以便我可以使用REGEX來刪除額外的短語。
在這種情況下codecs.encode(unicode_string, 'unicode-escape')
您不需要codecs.encode(unicode_string, 'unicode-escape')
。 內存中沒有字符串文字只有字符串對象。
Unicode字符串是Python中的一系列Unicode代碼點。 可以使用不同的代碼點來編寫相同的用戶感知字符,例如, 'Ç'
可以寫為u'\Ç'
和u'\C\̧'
。
您可以使用NFKD
Unicode規范化表單來確保“breves”是分開的,以便在重復時不會錯過它們:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import unicodedata
s = u"freø̯̯nt"
# remove consecutive duplicate "breves"
print(re.sub(u'\u032f+', u'\u032f', unicodedata.normalize('NFKD', s)))
你能解釋為什么你的re.sub命令沒有任何+1來確保breves是連續的字符嗎? (比如@Paulo Freitas的答案 )
re.sub('c+', 'c', text)
確保re.sub('c+', 'c', text)
中沒有'cc','ccc','cccc'等。 有時正則表達式不更換不必要的工作, 'c'
與'c'
。 但結果是一樣的:文本中沒有連續重復的'c'
。
來自@Paulo Freitas答案的正則表達式也應該有效:
no_duplicates = re.sub(u'(\u032f)\\1+', r'\1', unicodedata.normalize('NFKD', s))
它僅對重復項執行替換。 如果它是應用程序中的瓶頸,您可以測量時間性能並查看正則表達式運行得更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.