在我正在處理的文本文件中,我有像 這樣的字符。不知道他們是什麼。python將未知字符轉換爲ascii
我想知道如何刪除/轉換這些字符。
我試圖通過使用.encode('ascii','ignore')將它轉換爲ascii。蟒蛇告訴我字符不whithin 0128
我也曾嘗試unicodedata,unicodedata.normalize( 'NFKD',文本).encode( 'ASCII', '忽略'),與同樣的錯誤
任何幫助?
謝謝!
在我正在處理的文本文件中,我有像 這樣的字符。不知道他們是什麼。python將未知字符轉換爲ascii
我想知道如何刪除/轉換這些字符。
我試圖通過使用.encode('ascii','ignore')將它轉換爲ascii。蟒蛇告訴我字符不whithin 0128
我也曾嘗試unicodedata,unicodedata.normalize( 'NFKD',文本).encode( 'ASCII', '忽略'),與同樣的錯誤
任何幫助?
謝謝!
你總是可以採取一個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可以幫助您保持一切。
感謝您的介紹。但是我如何找出原文的編碼? – cheng
@cheng我不確定你可以輕鬆地直接編碼隨機字符串。它可能顯示在某個地方,儘管在文件或其他地方 – TankorSmash
正如在演示文稿中所解釋的,您必須通過一些事先的協議來了解編碼。你可以猜測編碼,但唯一可以確定的方法是有一個解釋編碼是什麼的規範。 –
它並不完美(尤其是短字符串),但在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。
'od -x'報告'bfef efbd bdbf bfef efbd bdbf'。 – sarnold