什么是NChardet

NChardet是mozilla自动字符编码识别程序库chardet的.NET实现,它移植自jchardet,chardet的java版实现,可实现对给定字符流的编码探测。

NChardet是如何工作的

NChardet通过逐个比较输入字符来猜测编码;由于是猜测,所以可能会有不能完全识别的情况;如果输入字符不能确定正确的编码,那么NChardet会给出一组可能的编码值。

何使用NChardet

要使用NChardet来探测编码,需要进行如下步骤。

1、使用制定的语言线索来构造Detector类的实例对象。
    2、用实现了ICharsetDetectionObserver接口的对象作为参数来调用Detector类的Init方法。
    3、传入要探测的字符流进行编码探测。
    4、调用Detector类的DataEnd方法。
    5、得到结果或可能的结果集。

语言线索是一个整数,可用的语言线索有如下几个:

1.    Japanese
         2.    Chinese 
         3.    Simplified Chinese 
         4.    Traditional Chinese 
         5.    Korean 
         6.    Dont know (默认)

ICharsetDetectionObserver接口只有一个Notify方法,当NChardet引擎认为自己已经探测出正确的编码时,它就会调用这个Notify方法,用户程序可以从这个Nodify方法中得到通知(重写ICharsetDetectionObserver接口的Notify实现)。

代码实例:

 //实现ICharsetDetectionObserver接口
    public class MyCharsetDetectionObserver :
        NChardet.ICharsetDetectionObserver
    {
        public string Charset = null;
        
        public void Notify(string charset)
        {
            Charset = charset;
        }
    }

int lang = 2 ;//
    //用指定的语参数实例化Detector
        Detector det = new Detector(lang) ;
    //初始化
        MyCharsetDetectionObserver cdo = new MyCharsetDetectionObserver();
        det.Init(cdo);

//输入字符流
    Uri url = new Uri(“http://cn.yahoo.com”);
    HttpWebRequest request =
        HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response =
        (HttpWebResponse)request.GetResponse();
    Stream stream = response.GetResponseStream();
    
    byte[] buf = new byte[1024] ;
    int len;
    bool done = false ;
    bool isAscii = true ;

while( (len=stream.Read(buf,0,buf.Length)) != 0) {
        // 探测是否为Ascii编码
        if (isAscii)
            isAscii = det.isAscii(buf,len);

// 如果不是Ascii编码,并且编码未确定,则继续探测
        if (!isAscii && !done)
                done = det.DoIt(buf,len, false);

}
    stream.Close();
    stream.Dispose();
    //调用DatEnd方法,
    //如果引擎认为已经探测出了正确的编码,
//则会在此时调用ICharsetDetectionObserver的Notify方法
    det.DataEnd();

if (isAscii) {
        Console.WriteLine("CHARSET = ASCII");
          found = true ;
    }
    else if (cdo.Charset != null)
    {
        Console.WriteLine("CHARSET = {0}",cdo.Charset);
        found = true;
    }
    
    if (!found) {
        string[] prob = det.getProbableCharsets() ;
        for(int i=0; i<prob.Length; i++) {
            Console.WriteLine("Probable Charset = " + prob[i]);
        }
    }
    Console.ReadLine();

获得NChardet

NChardet Library (.NET 1.1 and .NET 2.0 ,DLL)

NChardet Source Code (开发环境为SharpDevelop 2.0)

版权说明

本程序移植自jchardet,版权说明请参照jchardet,C#代码采用BSD授权。

相关链接

mozilla chardet http://www.mozilla.org/projects/intl/chardet.html
    mozilla chardet 下载  http://lxr.mozilla.org/mozilla/source/intl/chardet/
    jchardet http://jchardet.sourceforge.net/
    SharpDevelop http://www.icsharpcode.net/OpenSource/SD/
    字符集编码的自动识别jchardet http://hedong.3322.org/archives/000361.html

http://www.cnblogs.com/hhh/archive/2007/01/27/632251.html

.NET自动字符编码识别程序库 NChardet的更多相关文章

  1. C语言字符编码处理

    一.字符编码识别 1.简介 uchardet是一个开源的用于文本编码检测的C语言库,其功能模块是用C++实现的,通过一定数量的字符样本独立的分析出文本的编码,当前已经支持UTF-8/GB13080/B ...

  2. hibernate自动建表采用UTF-8字符编码

    hibernate自动建表采用UTF-8字符编码 hibernate建表默认为UTF-8编码 >>>>>>>>>>>>>& ...

  3. fedora23深度配置gnome系统环境, 如设置ibus的面板字体大小 以及gedit 自动探测文件字符编码fileencodings

    除了系统桌面gnome, 以及gnome应用程序自带的preferences, 还有很多设置, 没有在preferences, 而是被深度地隐藏在系统中, 这时, 需要安装 dconf-tools: ...

  4. 字符编码-UNICODE,GBK,UTF-8区别【转转】

    字符编码介绍及不同编码区别 今天看到这篇关于字符编码的文章,抑制不住喜悦(总结的好详细)所以转到这里来.转自:祥龙之子http://www.cnblogs.com/cy163/archive/2007 ...

  5. Linux 下查看文件字符编码和转换编码

    Linux 下查看文件字符编码和转换编码 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linu ...

  6. 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  7. 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?

    转自:  http://apps.hi.baidu.com/share/detail/17798660 字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识.不注意的人可能对这个不 ...

  8. 第六节,初识python和字符编码

    程序语言的发展 机器语言 程序语言,最初的计算机语言是机器语言,完全是0和1组成的二进制串  如:01010101 11010101 汇编语言 因为01010101的字符串,冗长,不利于维护,所以产生 ...

  9. 转 :Vim文件编码识别与乱码处理

    Vim文件编码识别与乱码处理   在 Vim 中,有四个与编码有关的选项,它们是:fileencodings.fileencoding.encoding 和 termencoding.在实际使用中,任 ...

随机推荐

  1. Windows进程间通信的各种方法

    原文:Windows进程间通信的各种方法 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成.多进程/多线程是Windows操作系 ...

  2. 开始使用Logstash

    开始使用Logstash 本节将指导处理安装Logstash 和确认一切是运行正常的, 后来的章节处理增加负载的配置来处理选择的使用案例. 这个章节包含下面的主题: Installing Logsta ...

  3. BZOJ1270: [BeijingWc2008]雷涛的小猫

    1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 836  Solved: 392[Submit][ ...

  4. bzoj1149

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1149 水题..... 直接BFS. #include<cstdio> #inclu ...

  5. Apache+php配置 Mysql安装出错解决办法

    此文包括的注意内容:软件版本及下载地址Apache2.4的配置和安装php7.0的配置mysql5.5的安装常见问题及解决方法1.软件版本Windows server 2008 r2+ 64位Apac ...

  6. Quartz集成springMVC 的方案一

    Quartz是一个开放源码项目,专注于任务调度器. springMVC 具体的搭建框架就不具体说明,接下来直接描述把Quartz集成到springMVC 框架中. 步骤: 1.引入所需要的jar包 2 ...

  7. hadoop执行hdfs文件到hbase表插入操作(xjl456852原创)

    本例中需要将hdfs上的文本文件,解析后插入到hbase的表中. 本例用到的hadoop版本2.7.2 hbase版本1.2.2 hbase的表如下: create 'ns2:user', 'info ...

  8. class 类(2)

    类属性和实例属性 一个类实例化后,实例是一个对象,有属性.同样,类也是一个对象,它也有属性. >>> class A(object): ... x = 7 ... >>& ...

  9. python (3):wxPython打包app,报错

    1,打包app报错 如图: 使用py2app,mac下打包成app.异常.程序直接退出. 没有详细的错误信息,client程序直接崩溃了. 2.原因 代码没有几行: #!/usr/bin/python ...

  10. Linux查看网络即时网速

    sar -n DEV 1 100 1代表一秒统计并显示一次 100代表统计一百次 使用ntop等工具,就更方便简单了,不过这个更灵活 P.S. sar在sysstat包 来源:http://www.c ...