源码下载地址:http://download.csdn.net/source/414086

汉字编码是一项较为麻烦的事情,弄不好就会造出些谁都看不懂的乱码。比如我想做个针对汉字网站的爬虫系统,需要对非特定的页面进行数据解析处理,而此时我所访问的页面编码格式未知,如果不能正确处理页面编码,则很难获得我们理想中的数据。

通常这时候可能有几种选择:

一是根据response的ContentType获得,如果服务器支持的话此项中会返回charset数值,解析即可。但对不返回或者不支持的服务器则无能为力。

二是使用正则或自定义解析函数截取页面中‘charset=’后的数据,采取死钉战术,但万一采集的页面中没有此项或者此项有错,也就回天乏术。

三就是老老实实的解析全文,最后返回一个符合的编码格式。

此例中我演示了几种较常见编码的识别方法,通过统计编码为指定编码的或然率, 而后返回可能性最高的编码方式。在无法获得确切编码之时,这可说是一种唯一的选择。

这种识别方式主要是针对汉字编码而来,所以对应页面中的汉字数目越多,统计结果就越准确,反之则很难识别出正确结果。


Encoding.java
java字符串编码类型获取package org.loon.test.encoding;
java字符串编码类型获取

Encode,java(省略,见源码)

ParseEncoding.java
java字符串编码类型获取package org.loon.test.encoding;
java字符串编码类型获取
java字符串编码类型获取
import java.io.ByteArrayOutputStream;
java字符串编码类型获取
import java.io.File;
java字符串编码类型获取
import java.io.FileInputStream;
java字符串编码类型获取
import java.io.FileNotFoundException;
java字符串编码类型获取
import java.io.IOException;
java字符串编码类型获取
import java.io.InputStream;
java字符串编码类型获取
import java.net.MalformedURLException;
java字符串编码类型获取
import java.net.URL;
java字符串编码类型获取


EncodingTest.java
java字符串编码类型获取package org.loon.test.encoding;

输出结果:
java字符串编码类型获取


相关文章: