2009-05-03 59 views
7

我有這樣的符號的字符串:如何在Python中使用撇號等?

' 

這是一個撇號顯然。

我試過saxutils.unescape()沒有任何的運氣,並試圖urllib.unquote()

我如何可以解碼此?謝謝!

回答

2

退房this question。你在找什麼是「html實體解碼」。通常情況下,你會發現一個名爲「htmldecode」的函數,它可以做你想做的事情。 Django和Cheetah都提供像BeautifulSoup一樣的功能。

如果您不想使用庫並且所有實體都是數字,則其他答案將很有用。

+0

感謝。 Django有什麼?因爲我查看了文檔,但無法找到任何東西...... – rick 2009-05-03 03:55:24

-2

我不知道關於&或#,但這裏是解碼一些代碼:

>>>chr(39) 
"'" 
>>>ord("'") 
39 
1

最可靠的解決方案似乎是Python着名的Fredrik Lundh的this function。它不是最短的解決方案,但它處理命名實體以及十六進制和十進制代碼。

2

試試這個:(發現here

from htmlentitydefs import name2codepoint as n2cp 
import re 

def decode_htmlentities(string): 
    """ 
    Decode HTML entities–hex, decimal, or named–in a string 
    @see http://snippets.dzone.com/posts/show/4569 

    >>> u = u'E tu vivrai nel terrore - L'aldilà (1981)' 
    >>> print decode_htmlentities(u).encode('UTF-8') 
    E tu vivrai nel terrore - L'aldilà (1981) 
    >>> print decode_htmlentities("l'eau") 
    l'eau 
    >>> print decode_htmlentities("foo < bar")     
    foo < bar 
    """ 
    def substitute_entity(match): 
     ent = match.group(3) 
     if match.group(1) == "#": 
      # decoding by number 
      if match.group(2) == '': 
       # number is in decimal 
       return unichr(int(ent)) 
      elif match.group(2) == 'x': 
       # number is in hex 
       return unichr(int('0x'+ent, 16)) 
     else: 
      # they were using a name 
      cp = n2cp.get(ent) 
      if cp: return unichr(cp) 
      else: return match.group() 

    entity_re = re.compile(r'&(#?)(x?)(\w+);') 
    return entity_re.subn(substitute_entity, string)[0]