java中判断文本的编码格式的方法

java中判断文本的编码格式的方法

很早之前遇到了一个问题,很多文本数据的解析是需要提前知道编码格式的,如果对并不知道编码格式就需要进行自动获取。
提到判断文本格式很多人往往会想到解析文本文件的前几个字节进行判断,或是通过java自带的字符串getBytes的方式进行转换,换成如utf-8之类的通用编码,但是通过测试会发现第一种方法只有部分程序保存的文件会携带这个标识,其他很多如notepad++等保存的完全不支持,第二种方法则完全不可用,直接变成乱码了。
判断文本的编码方式并没有这么简单,按照原理需要从编码格式层面对字符串进行分析,自己写是比较麻烦的,windows api中的MultiByteToWideChar和WideCharToMultiByte获取能帮到忙,但是不具有通用性。
那如何在java中进行编码判断呢,通过查找发现jchardet包是个不错的工具,这个应该是通过firefox的部分代码改进而来的。
首先,在工程中引入jchardet的jar包,或在maven中添加如下内容

<dependency>
    <groupId>net.sourceforge.jchardet</groupId>
    <artifactId>jchardet</artifactId>
    <version>1.0</version>
</dependency>

校验采用如下方式

public static String getTextCharset(byte[] data,String defaultcharset){
        nsDetector det = new nsDetector(nsPSMDetector.CHINESE);
        final StringBuffer fullcharset = new StringBuffer("");

        nsICharsetDetectionObserver server = new nsICharsetDetectionObserver(){
            public StringBuffer sb = fullcharset;
            public void Notify(String charset)
            {
                sb.append(charset);
            }
        };

        det.Init(server);
        det.DoIt(data, data.length,false);
        det.DataEnd();
        if(StringUtils.isBlank(fullcharset.toString())){
            return defaultcharset;
        }

        return fullcharset.toString();
    }

参数里data是原始数据

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值