2012-06-30 64 views
3

在我正在處理的文本文件中,我有像 這樣的字符。不知道他們是什麼。python將未知字符轉換爲ascii

我想知道如何刪除/轉換這些字符。

我試圖通過使用.encode('ascii','ignore')將它轉換爲ascii。蟒蛇告訴我字符不whithin 0128

我也曾嘗試unicodedata,unicodedata.normalize( 'NFKD',文本).encode( 'ASCII', '忽略'),與同樣的錯誤

任何幫助?

謝謝!

+0

'od -x'報告'bfef efbd bdbf bfef efbd bdbf'。 – sarnold

回答

6

你總是可以採取一個Unicode字符串的使用您顯示代碼:

my_ascii = my_uni_string.encode('ascii', 'ignore') 

如果給你一個錯誤,那你就真的沒有一個Unicode字符串的開始。如果這是真的,那麼你有一個字節字符串。你需要知道它使用的是什麼編碼,您可以用把它變成一個Unicode字符串:

my_uni_string = my_byte_string.decode('utf8') 

(假設你的編碼是UTF-8)。

字節字符串和Unicode字符串之間的分隔可能會造成混淆。我的演示文稿Pragmatic Unicode, or, How Do I Stop The Pain可以幫助您保持一切。

+0

感謝您的介紹。但是我如何找出原文的編碼? – cheng

+0

@cheng我不確定你可以輕鬆地直接編碼隨機字符串。它可能顯示在某個地方,儘管在文件或其他地方 – TankorSmash

+0

正如在演示文稿中所解釋的,您必須通過一些事先的協議來了解編碼。你可以猜測編碼,但唯一可以確定的方法是有一個解釋編碼是什麼的規範。 –

1

它並不完美(尤其是短字符串),但在chardet庫將這裏使用的:

http://pypi.python.org/pypi/chardet

要讓chardet的計算出編碼,然後編碼爲Unicode,你會怎麼做:

import chardet 
encoding = chardet.detect(some_string)['encoding'] 
unicode_string = unicode(some_string, encoding) 

當然,如果他們超出ascii範圍,您將無法將它們編碼爲ascii。