2013-05-26 21 views
1

我有以下代碼需進行重新檢測UTF-8

inf = codecs.open(inPath , encoding='utf-8') 
outf = codecs.open(outPath, encoding='utf-8', mode='w') 
old = u'’;' 
new = u'’&#59;' 
for line in inf: 
    line = line.replace(old,new) 
    asc = line.encode('ascii', 'xmlcharrefreplace')  
    outf.write(asc) 
    # print asc 
inf.close() 
outf.close() 

這(正確)將智能引號和重音符號等,成HTML格式,使用數字格式。它會轉換

<p>Dreams like: 「Someday I’ll travel to…; someday I’ll write a book; 

<p>Dreams like: &#8220;Someday I&#8217;ll travel to&#8230;; someday I&#8217;ll write a book; 

這是正確的。

但是代碼進一步下游,在中間看到&#8230;;,丟棄了雙分號,然後抱怨說它沒有一個有效的實體。我無法更改此代碼。

正如您從我的代碼中可以看到的,我發現一個實體後面跟着一個分號。我不想替換源代碼中的所有分號。

如何檢測出符號> 127的UTF-8字符的分號,以便我可以用&#59;替換它?謝謝。

+0

在我看來,這個問題是與「滴雙分號,然後抱怨說,它沒有得到有效的實體」的代碼;你也應該發佈該代碼;我不認爲從文本中移除雙分號就是所謂的預期行爲。 – pilsetnieks

+0

我完全同意下游代碼已損壞。它不是亞馬遜的代碼就是蘋果的 - 而且他們不會打球。 – Ian

+0

那麼你打電話的代碼是什麼?也許這個問題是相當「爲什麼蘋果的任何API從我的文字刪除雙分號?」不是正則表達式與以下分號 – pilsetnieks

回答

1

臉棕櫚!

如果我先將它轉換爲htmlentites,然後用替換;&#69;即可解決我的問題。

自我提醒 - 考慮,你做的事情,以及該怎麼辦!

+0

我想你應該能夠接受這個爲「的」答案。 –