一尘不染

如何检测文本文件的编码/代码页

c#

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

有没有办法(自动)检测文本文件的代码页?

detectEncodingFromByteOrderMarks,对StreamReader构造,工程UTF8
和其他的Unicode标文件,但是我正在寻找一种方法来检测代码页,像ibm850windows1252


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

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

解:

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

阅读 272

收藏
2020-05-19

共1个答案

一尘不染

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

无论如何,这是您需要阅读的内容:
每个软件开发人员的绝对最低限度必须绝对肯定地了解Unicode和字符集(无借口!)

特别是乔尔说:

关于编码的最重要的事实

如果您完全忘记了我刚才解释的所有内容,请记住一个极其重要的事实。不知道字符串使用什么编码就没有意义。您不能再将自己的头埋在沙子里,并假装“纯文本”为ASCII。没有纯文本这样的东西。

如果您在内存,文件或电子邮件中有字符串,则必须知道字符串的编码,否则无法解释它或将其正确显示给用户。

2020-05-19