如何检测所有语言的字符集编码?

时间:2014-01-08 09:31:53

标签: c#

我有一个.smi文件。 当我用notepad ++打开时,我有:

<font color="#FF8040"><I>- °øµ¿¹ø¿ªÀÌ´Ùº¸´Ï Áö¸í°ú À̸§ÀÌ ¾à°£¾¿ Ʋ¸±¼ö ÀÖ½À´Ï´Ù.-</I></font>

然后我设置字符集&gt;韩语&gt; UEC-KR:

<font color="#FF8040"><I>- 공동번역이다보니 지명과 이름이 약간씩 틀릴수 있습니다.  -</I></font>

那么,我能在C#中做些什么呢?我希望当我打开文件时,应用程序可以检测字符集并在richtextbox中显示。 我用过:

System.IO.StreamReader sr = new System.IO.StreamReader(openFile.FileName);
inputText.Text = sr.ReadToEnd();
inputText.SelectAll();
inputText.SelectionFont = new Font("Arial Unicode MS",9,FontStyle.Regular);

输入结果:

<font color="#FF8040"><I>- ���������̴ٺ��� ����� �̸��� �ణ�� Ʋ���� �ֽ��ϴ�.  -</I></font>

2 个答案:

答案 0 :(得分:1)

您需要告诉StreamReader在读取文件时使用适当的编码。您可以通过以下方式更改第一行来实现此目的:

var krEncoding = System.Text.Encoding.GetEncoding("euc-kr");
System.IO.StreamReader sr = 
    new System.IO.StreamReader(openFile.FileName, krEncoding);

这是可能的,因为StreamReader构造函数有overload,它接受​​编码作为参数。

答案 1 :(得分:0)

我还没见过任何* .smi,所以我的回答可能是假的,但是:

  1. 如果文件是原始的16位unicode

    • 然后任何char被编码为2个字节
    • 将文件视为二进制文件并查看前两个BYTE
    • 它应该是FF,FE [hex]
    • 它是原始的16位UNICODE编码签名
    • 之后,任何字符都设置为两个BYTE:'ASCII',代码页
    • 阅读代码页字节,看看它是什么语言......
    • 或使用完整的unicode字体
  2. 如果文件是UTF-8 / UTF-16

    • 从扩展字符编码中检测代码页(请参阅unicode文档)
    • 或使用完整的unicode字体
  3. * .smi中的数据可以与文件本身不同地编码

    • 在这种情况下查看代码页标签的smi文档
    • 如果没有,那么你运气不好
    • 如果确实如此,那么你应该使用标签进行解码......
  4. <强> PS。那里没有很多unicode字体,没有一个是完整的!
    从更好的(支持更多页面)我只知道:

    • Quivira
    • unifont(请注意这个是位图字体!!!)
    • 但是我在这个地区没有做过大约一年的研究,所以情况可能会改变......