2015-05-24 19 views
-1

我有一個項目,我需要用「ASCII代替所有非ASCII字符(在html中)」。是字符,如— – §   "非ascii或ascii?

我只是想知道:標題中的字符是非ascii還是ascii?

如果它們不是ascii,我該如何使用Pyhton將它們轉換爲ascii?謝謝!

+0

它們不是ascii。只需查看一個ASCII表格 - 這些字符都不會在那裏列出 – Eric

+0

嘗試在Google中搜索ASCII並注意字符代碼(數字值)。有你的答案。 –

+2

我不清楚你的標題是否正確代表你的任務。由於html可以包含*字符串*'—',並且所有這七個字符都是ascii,您確定需要替換那些內容嗎? –

回答

3

其中有些是ASCII碼,有些不是。您可以查看HTML 4的含義here(或HTML5,XHTML 4等的類似URL)。該表爲您提供每個實體的Unicode代碼點; Unicode代碼點0-127對應於ASCII字符0-127,Unicode代碼點128+是非ASCII。

對於那些非ASCII的,你必須決定什麼來替換它們,然後才能編寫代碼來替換它們。

特別是:

  • —,U + 2014,非ASCII,通常由--取代。
  • –,U + 2013,非ASCII,通常替換爲-
  • §§,U + 00A7,非ASCII;沒有共同的替代品,所以你必須挑選一些東西,也許"sect. "
  •  是一個非破壞性空間,U + 00A0,非ASCII,通常由空格替代。
  • "",U + 0022,已經是ASCII。

取代這些方法的一種方法是使用str.replace方法。例如:

h = h.replace('—', '--').replace('–', '-') 
h = h.replace('§', 'sect. ').replace(' ', ' ') 

不過,我想你會更好轉換爲Unicode的轉義,然後使用str.translate(或unicode.translate,如果這是Python的2.X)的字符映射。翻譯表格比一長串replace調用變得簡單得多(而且效率更高),一旦有超過4個字符需要處理。這樣,你也可以處理諸如非扭曲的電子短劃線或其他你沒有注意到的角色。例如:

h = html.unescape(h) 
table = {0x2013: '-', 0x2014: '--', 0x00a7: 'sect. ', 0x00A0: ' '} 
h = h.translate(table) 
h.encode('ascii') # forces an exception if you missed any non-ASCII chars 
+0

我認爲你只是完成了OP –

+0

的任務@PadraicCunningham:幸運的是,如果這真的是一項家庭作業,而且他太笨或懶得自己開始解決問題或試圖理解答案,我會說有一個他很可能會失敗,因爲他試圖用字節而不是unicode來運行它,或者它不起作用,或者因爲他不知道如何從「諸如......這樣的字符」擴展到所有賦值包含的字符...... (如果他真的想解決這個問題,他應該沒有問題。) – abarnert

+0

另一種可能的解釋是「這些字符中的哪一個應該轉換爲實體」,另一個是實體代碼本身是ASCII(當然這些是)。提名關閉不明確,但絕對upvote這個嘗試的答案。 – tripleee