.NET自动字符编码识别程序库 NChardet
什么是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实现)。
代码实例:
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的更多相关文章
- C语言字符编码处理
一.字符编码识别 1.简介 uchardet是一个开源的用于文本编码检测的C语言库,其功能模块是用C++实现的,通过一定数量的字符样本独立的分析出文本的编码,当前已经支持UTF-8/GB13080/B ...
- hibernate自动建表采用UTF-8字符编码
hibernate自动建表采用UTF-8字符编码 hibernate建表默认为UTF-8编码 >>>>>>>>>>>>>& ...
- fedora23深度配置gnome系统环境, 如设置ibus的面板字体大小 以及gedit 自动探测文件字符编码fileencodings
除了系统桌面gnome, 以及gnome应用程序自带的preferences, 还有很多设置, 没有在preferences, 而是被深度地隐藏在系统中, 这时, 需要安装 dconf-tools: ...
- 字符编码-UNICODE,GBK,UTF-8区别【转转】
字符编码介绍及不同编码区别 今天看到这篇关于字符编码的文章,抑制不住喜悦(总结的好详细)所以转到这里来.转自:祥龙之子http://www.cnblogs.com/cy163/archive/2007 ...
- Linux 下查看文件字符编码和转换编码
Linux 下查看文件字符编码和转换编码 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linu ...
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
转自: http://apps.hi.baidu.com/share/detail/17798660 字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识.不注意的人可能对这个不 ...
- 第六节,初识python和字符编码
程序语言的发展 机器语言 程序语言,最初的计算机语言是机器语言,完全是0和1组成的二进制串 如:01010101 11010101 汇编语言 因为01010101的字符串,冗长,不利于维护,所以产生 ...
- 转 :Vim文件编码识别与乱码处理
Vim文件编码识别与乱码处理 在 Vim 中,有四个与编码有关的选项,它们是:fileencodings.fileencoding.encoding 和 termencoding.在实际使用中,任 ...
随机推荐
- KEIL中的一些细节
1.KEIL中的指针: 基于存储器的指针:数据类型 [指向存储区] *[ 指针存储区]指针变量 char xdata * px //px本身存在于自动分配的空间,一般位于data中,指向的内容位于x ...
- hdu4405:概率dp
题意: 总共有n+1个格子:0-n 初始情况下在 0号格子 每次通过掷骰子确定前进的格子数 此外 还有一些传送门可以瞬间从 u 点传送到 v 点(必须被传送) 求走到(或超过)n点总共需要掷多少次骰子 ...
- hdu 5159 Card (期望)
Problem Description There are x cards on the desk, they are numbered from 1 to x. The score of the c ...
- openwrt上网配置的一些理解
其实已经有很多帖子讲过openwrt路由器上网配置了,我这里主要是讲我自己的一块硬件路由使用openwrt后的一些上网配置.之所以要研究我自己的配置,是因为硬件,硬件不一样,配置也就不一样,但是总的原 ...
- [RxJS] Reactive Programming - Sharing network requests with shareReplay()
Currently we show three users in the list, it actually do three time network request, we can verfiy ...
- neural style论文解读
相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 概述 在艺术领域,艺术家 ...
- VS2015 添加DNX SDK
第一次运行VS2015,添加第一个ASP.NET 5程序时会报一个错误“DNX SDK版本 “dnx-clr-win-x86.1.0.0-beta5”无法安装. 解决办法: 打开CMD :输入 @po ...
- 中控考勤机-C#操作
引用:Interop.zkemkeeper.dll 实例化: public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM(); 首先从数据库中获取考 ...
- jquery,js常用特效名称
- FTS下载地址
http://download.microsoft.com/download/5/2/e/52e22b90-2ba7-427b-9ea4-604d3b37a2e7/vs2012_tfs_chs.iso