使用juniversalchardet做字符编码识别
生活随笔
收集整理的這篇文章主要介紹了
使用juniversalchardet做字符编码识别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
在抓取網站的頁面的時候最煩人的一件事情之一就是識別原站點的編碼,通常來說只有GBK(GB2312)和UTF8兩種,不過依舊需要讀取大量Http頭信息來識別,有些網站則由于歷史原因兩種編碼同時存在,導致抓取中的一些問題。于是苦苦尋找,終于找到神器juniversalchardet。
首先引包
<!-- Mozilla的編碼識別包 --> <dependency><groupId>com.googlecode.juniversalchardet</groupId><artifactId>juniversalchardet</artifactId><version>1.0.3</version> </dependency>寫個簡單的Demo(我封裝成工具方法了)
import java.io.File; import java.io.IOException;import looly.github.hutool.FileUtil; import org.mozilla.universalchardet.UniversalDetector;/*** 編碼識別工具類* @author loolly**/ public class CharsetDetectUtil {public static String detect(byte[] content) {UniversalDetector detector = new UniversalDetector(null);//開始給一部分數據,讓學習一下啊,官方建議是1000個byte左右(當然這1000個byte你得包含中文之類的)detector.handleData(content, 0, content.length);//識別結束必須調用這個方法detector.dataEnd();//神奇的時刻就在這個方法了,返回字符集編碼。return detector.getDetectedCharset();}public static void main(String[] args) throws IOException {byte[] bytes = FileUtil.readBytes(new File("E:/workspace/python/htmlUtil.py"));System.out.println(detect(bytes));} }注意
我這個工具方法還是有些可以改進的,官方建議重復利用UniversalDetector對象,可以設置為類屬性,不過這時你就要調用detector.reset()方法重置UniversalDetector了(還有就是如果設置為類屬性,編碼識別這個方法就不是線程安全的了)。
官網上還提到了一個jchardet,是另一個字符編碼識別庫,只不過比juniversalchardet老一些,速度也比不上后者,所以建議大家使用juniversalchardet。
轉載于:https://my.oschina.net/looly/blog/263418
總結
以上是生活随笔為你收集整理的使用juniversalchardet做字符编码识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于数据库查询优化的思考
- 下一篇: struts2中文件上传