在我们的应用程序中,我们从各种来源接收文本文件(.txt.csv等)。读取时,这些文件有时包含垃圾,因为这些文件是在其他/未知代码页中创建的。

有没有办法(自动)检测文本文件的代码页?
detectEncodingFromByteOrderMarks构造函数上的StreamReader适用于UTF8和其他带有unicode标记的文件,但是我正在寻找一种方法来检测代码页,例如ibm850windows1252

感谢您的回答,这就是我所做的。

我们收到的文件来自最终用户,他们不了解代码页。接收者也是最终用户,到目前为止,这是他们对代码页的了解:代码页存在并且令人讨厌。

解决方案:

  • 在记事本中打开接收的文件,看一段乱码的文本。如果有人叫弗朗索瓦(François)之类的东西,凭着您的智慧,您就可以猜到。
  • 我创建了一个小应用程序,用户可以用来打开文件,并输入一个文本,用户知道该文本将在使用正确的代码页时显示在文件中。
  • 循环浏览所有代码页,并使用用户提供的文本显示给出解决方案的代码页。
  • 如果弹出一个以上的代码页,请要求用户指定更多文本。
  • 最佳答案

    您无法检测到代码页,需要告知它。您可以分析字节并进行猜测,但这会带来一些奇怪(有时很有趣)的结果。我现在找不到它,但是我敢肯定,记事本可以欺骗显示中文的英文文本。

    无论如何,这是您需要阅读的内容:
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

    特别是乔尔说:

    07-27 19:50