簡體   English   中英

如何在Python 2.7中將unicode字符串轉換為字符串文字?

[英]How can I convert a unicode string into string literals in Python 2.7?

Python2.7:我想做一些與眾不同的事情。 大多數人希望將字符串文字轉換為更易讀的字符串。 我想將以下unicode字符串列表轉換為它們的文字形式:

  • hallöchen
  • 大街
  • Gemüse
  • freø̯̯nt

他們的代碼點表單看起來像這樣:

\\ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM