2011-08-22 71 views
3

我創建了一個基於'HTMLParser'的子類來提取html內容。每當我有性格裁判如解碼html內容和HTMLParser

' ' '&' '–' '…' 

我想要的

' ' (space), '&', '-', '...', and so on. 

什麼是一些簡單的字符裁判的轉化爲自己的正確表示最好的辦法他們的英國同行來替代它們?

我的文字是類似於:

Some text goes here&after that, 6:30 pm–8:45pm and maybe 
something like … 

我想將其轉換爲:

Some text goes here & after that, 6:30 pm-8:45pm and maybe 
something like ... 
+0

[在Python中將XML/HTML實體轉換爲Unicode字符串](http://stackoverflow.com/questions/57708/convert-xml-html-entities-into-unicode-string-in-python) – geoffspear

回答

9

你的問題有兩個部分。簡單的部分是解碼HTML實體。要做到這一點最簡單的方法是從HTMLParser模塊抓住這個無證但長時間穩定的方法:

>>> HTMLParser.HTMLParser().unescape('a < é – …') 
u'a < é – …' 

第二部分,轉換Unicode字符爲ASCII真人秀,是棘手和也相當值得懷疑。我會盡量保留Unicode短劃線「 - 」和類似的印刷細節,而不是將它們轉換爲簡單的連字符和直引號等字符。除非您的應用程序根本無法處理非ASCII字符,否則您應該儘可能保持原樣,以及所有其他Unicode字符。

U + 2013省略號字符的具體情況可能不同,因爲它是一個'兼容性字符',僅包含在Unicode中,用於無損地往返於其他具有該功能的編碼。最好你只要輸入三個點,然後讓字體的字形組合邏輯完全按照如何繪製它。

如果你想只需更換兼容字符(像這樣的,明確的繃帶,日本全角數字和其他古怪極少數),你可以試試您的字符串正火範式KC:

>>> unicodedata.normalize('NFKC', u'a < – …') 
u'a < é – ...' 

(注意,您可能希望保留的一些其他字符也是兼容性字符,包括'²'。)

下一步是將帶有變音符號的字母變成純字母,您可以通過正常化到NFKD,而他們刪除所有具有「組合」字符的字符ss來自字符串。這會給你以前重音的拉丁字母明白的ASCII,儘管對於許多語言來說,這種方式在語言上是不正確的。如果這是你關心你可以直接編碼爲ASCII:

>>> unicodedata.normalize('NFKD', u'a < – …').encode('us-ascii', 'ignore') 
'a < e ...' 

任何進一步的你可能會做的必須是特設因爲有摺疊串到ASCII沒有公認的標準。 Windows有一個實現,就像Lucene(ASCIIFoldingFilter)一樣。結果是相當可變的。

+0

htmlparser提示對我很有幫助。謝謝! – iceanfire