2014-01-08 15 views
1

我有一个.smi文件。 当我用记事本+ +,我不得不打开:如何检测所有语言的字符集ecoding?

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

然后我设置的字符集>韩国> UEC-KR:

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

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

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> 

回答

1

你需要告诉你的StreamReader使用适当的编码时,它读取文件。您可以通过更改第一行以实现这一目标:

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

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

+0

我可以使它自动?只需打开一个文件,应用程序就可以获得System.Text.Encoding.GetEncoding(使用代码).. – hazymnc

+0

@ user3172506不,请查看Mormegil提供的链接,作为对该问题的评论。没有*可靠的编码检测*。你所能做的最好的是运行一些启发式方法,这些方法适用于有限的场景。 [你基本上必须事先知道编码](http://www.joelonsoftware.com/articles/Unicode.html)。 – GolfWolf

+0

好的。多谢兄弟! – hazymnc

0

我还没看到任何* .SMI又那么我的回答可以是假的一些点,但:

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

    • 那么任何字符编码为2个字节
    • 看该文件作为二进制和看到的前两个字节
    • 它应该是FF,FE [六角]
    • 它是生16位UNICODE编码签名
    • 之后的任何字符都设置两个字节:“ASCII”,代码页
    • 读取的字节代码页,看看它是什么语言?
    • 或使用完整的Unicode字体
  2. 如果该文件是在UTF-8/UTF-16

    • 从扩展字符编码检测的代码页(见的unicode文档)
    • 或使用完整的Unicode字体
  3. 内* .SMI可以有不同的编码,然后将文件本身

    • 在这种情况下,看看在SMI documenattion的代码页标签
    • 如果其没有数据那么你的运气
    • ,如果是的话那么你建议立即进行删除用于解码标签的...

PS。那里没有很多unicode字体,没有完整的!
从更好(更支持页)我只知道的:

  • Quivira
  • unifont的(要知道这个人是位图字体!)
  • ,但我没有做任何研究该地区约一年,所以情况可能会改变...