使用多种编码的文件

dan*_*ast 5 csv unicode encoding utf-8 text-files

我正在读取一个文本文件,我猜它是用 utf-8 编码的。但有些行只能解码为 latin-1。我想说这是非常糟糕的做法,但无论如何我必须应对它。

我有以下问题:

第一:如何“猜测”文件的编码?我已经尝试过enca,但在我的机器上:

enca --list languages
belarussian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U
  bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113
      czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
   estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic
   croatian: CP1250 ISO-8859-2 IBM852 macce CORK
  hungarian: ISO-8859-2 CP1250 IBM852 macce CORK
 lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
    latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
     polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK
    russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr
     slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
    slovene: ISO-8859-2 CP1250 IBM852 macce CORK
  ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr
    chinese: GBK BIG5 HZ
       none:
Run Code Online (Sandbox Code Playgroud)

这不足以检测 latin-1。顺便问一下:如何增加 的可用语言列表enca

第二:是否可以使用不同的编码对文件进行部分编码?我认为,从技术角度来看,这是很有可能的:只需对文件的不同部分使用不同的编解码器即可。你见过这个吗?您将如何处理读取这样的文件?您会尝试使用不同的编码来解码每一行吗?你会怎么做呢?我实际上正在使用 python,如果有一个处理多重编码的例子,我将不胜感激。

第三:您通常如何处理您不知道其使用的编码的文件?从不同来源下载文本文件时,我经常遇到这个问题。它们通常是从电子表格(我猜是 Excel)导出的 CSV 文件,但根据导出参数,它们使用一种编码或另一种编码,没有提示选择了哪种编码,所以我不得不猜测。

Jon*_*oni 4

  1. 猜猜文件的编码文本 - 用什么编码?Python、Perl、Java、C?请注意,这有时会产生意想不到的结果(例如“布什隐藏事实”错误
  2. 有时,一个文件会有以不同编码进行编码的文本。文件格式为文件中的不同部分指定不同的编码,或者格式允许指定编码开关。例如,在 MIME 中,标头键为 ascii,标头值可以具有以其他编码方式编码的嵌入部分,并且内容的编码在 Content-Type 标头中声明。
  3. 如果您不知道编码,您只需从文件中(以二进制安全的方式)读取字节到缓冲区,直到可以确定编码。