日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用juniversalchardet做字符编码识别

發布時間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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做字符编码识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。