如何检测文件不是ANSI-Latin1?

Shi*_*ire 2 .net c# winforms

我有一个日期导入项目,客户端在其中发送ANSI-latin1编码文件(iso-8859-1).但是......似乎每周我们得到一个惊喜文件,一个格式不正确,导入基本上死得很可怕,需要手动干预才能恢复并继续...最常见的坏文件格式似乎是excel,压缩文件或XML/HTML文件......

因此,为了减轻人为干预,我想合理地确定我们是否有一个强大的ANSI候选文件,然后尝试浏览文件的每一行,查找64个坏字符中的1个然后对整个是否进行猜测发现的坏字符#行或文件不好...

我想的可能是进行Unicode/UTF检查和/或幻数检查或晚上试图检查一些特定的应用程序类型..文件没有文件扩展名所以任何检查都是通过检查内容和任何快速的方法来排除文件为非ANSI是完美的,因为导入过程需要每秒处理100-500条记录.

注意:已向我们发送了100多种不同类型的错误文件,包括图像和PDF.因此,您是否可以轻松快速地排除不同非ANSI类型的LTOS,而不是专门针对少数几个......

Ric*_*dle 5

鉴于您的示例"坏"文件类型,我会说对文件的前几个字节进行一系列快速检查:

  • 是UTF-16 BOM吗?
  • <html"或<!DOCTYPE"?
  • 是" <xml"吗?
  • 它有NUL字符吗?
  • 它是`PK\003\004'(zip文件头?)
  • 是它(无论Excel文件的开头是什么;你必须看一下8-)