我一直在腳本中讀取文件,提取和索引一些字符串。一切都很好,除了一個文件編碼問題。UTF8,Unicode和二進制數據讀取麻煩
我將嘗試恢復:從文件中的數據
我的腳本讀取的塊,將這些塊爲小寫和規範刪除替換特殊字符(C,A,E,A等)使用unicodedata.normalize :
unicodedata.normalize("NFKD",chunk.decode("utf8","ignore")).encode("ascii","ignore").lower()
在這種情況下,字符串「Olá,como vaivocê?Vamoscaçar?」將會導致「Ola,como vai voce?Vamos cacar?」它使用UTF8編碼的文本文件工作正常,但在嘗試從二進制文件(如MS .doc文件)中檢索字符串時失敗。使用上面的代碼,會給我一個字符串「Ol,como vai voc?Vamos caar?」
我設法使用unicode-escape(但它會失敗,UTF8文件)使用MS .doc文件。
unicodedata.normalize("NFKD",chunk.decode("unicode-escape","ignore")).encode("ascii","ignore").lower()
經過20多個小時的研究,我還沒有解決方案讓我的腳本在兩種情況下運行。
不幸的是我不能使用外部模塊。
在我看來,你在* unicodedata.normalize'之前做了太多的工作*。你能做任何事情之前的規範化嗎?這應該有希望爲編碼/解碼生成一組一致的數據。 –
你的「來自二進制文件(如MS .doc文件)的字符串」總是使用UTF-8編碼嗎?如果不是,你需要用不同的編碼方案對它們進行解碼。 AFAIK,這是沒有辦法的。因此,您的代碼必須知道每個輸入的編碼(例如,通過了解其源和編碼源)。 –
@AustinHastings在解碼之前進行規範化並不合理。你不能unicode規範一個字節序列。 – lenz