我一直在脚本中读取文件,提取和索引一些字符串。一切都很好,除了一个文件编码问题。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