如何检测文本的字符集?

时间:2012-02-04 17:29:21

标签: c# php diacritics

我有一个带有变音字符的文字显示不好,如:¤或或˘。我不知道文本是什么字符集。有没有简单的方法来解决它?如果有一些在线字符集检测器或可能是字符集转换预览器会很好吗?我想一个应用程序可以告诉我一些特定的变音字符在所有可用的编码中看起来是不正确的,所以我能够跟踪一个适合我在文本中的字符的那个。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

在Windows PowerShell中:

$bytes = [IO.File]::ReadAllBytes('some file.txt')
[Text.Encoding]::GetEncodings() |
  %{
    $_|Add-Member -pass Noteproperty Text ($_.GetEncoding().GetString($bytes))
  } | fl Name,Codepage,Text

调整文件的路径并浏览结果,直到看到看起来正确的内容; - )

这只是遍历.NET已知的所有编码,并使用相应的编码将文本转换为字符串。

答案 1 :(得分:1)

在C#中:

foreach (EncodingInfo encodingInfo in Encoding.GetEncodings())
    using (FileStream fileStream = File.OpenRead(filePath))
    using (StreamReader reader = new StreamReader(fileStream, encodingInfo.GetEncoding(), false))
        textBox1.Text += encodingInfo.DisplayName + ":\t " + reader.ReadToEnd() + "\r\n";

其中textBox1是一个大型多行TextBox(或任何其他合适的控件)。

我学到了一些警告:

  1. 默认情况下,控制台应用程序不支持Unicode。
  2. File.ReadAllText尝试根据字节顺序标记的存在自动检测文件的编码,即使明确指定了其他编码也是如此。抑制此问题的唯一方法是通过StreamReader构造函数重载,它允许禁止查找字节顺序标记。