java 如何判断字符串编码格式

Python015

java 如何判断字符串编码格式,第1张

java可供判断某字符是什么编码的一行代码

System.out.println("中文")

        System.out.println("中文".getBytes())

        System.out.println("中文".getBytes("GB2312"))

        System.out.println("中文".getBytes("ISO8859_1"))

        System.out.println(new String("中文".getBytes()))

        System.out.println(new String("中文".getBytes(), "GB2312"))

        System.out.println(new String("中文".getBytes(), "ISO8859_1"))

        System.out.println(new String("中文".getBytes("GB2312")))

        System.out.println(new String("中文".getBytes("GB2312"), "GB2312"))

        System.out.println(new String("中文".getBytes("GB2312"), "ISO8859_1"))

        System.out.println(new String("中文".getBytes("ISO8859_1")))

        System.out.println(new String("中文".getBytes("ISO8859_1"), "GB2312"))

        System.out.println(new String("中文".getBytes("ISO8859_1"), "ISO8859_1"))

        

        eg:判断当前字符串的编码格式。

//判断当前字符串的编码格式

if(destination.equals(new String(destination.getBytes("iso8859-1"), "iso8859-1")))

{

destination=new String(destination.getBytes("iso8859-1"),"utf-8")

}

如果是Java的String对象的话,则一定是Unicode的,这个没有为什么,Java就是这么定的。

我猜你的问题应该是如何判断一段字节流是什么编码类型,对吗?比如一个文件,或是网络上面取下来的一段Byte数组,你需要用一个合适的编码来解析成字符串。

这个让你失望了,没有一个文档化的,确定的方法来判断,只能用测试的方法,这个方法也只是猜测,不能百分百的确定,方法如下:

用常见的编码方式对字节流进行解码,比如Unicode,UTF8,

UTF8

without

BOM, UTF16,

ANSI等等。

对解析的结果进行判断,是不是一个合理的可打印字符,可打印字符最多的解码方式就是最可能的编码了。

如何判断可打印字符?流程如下:把解析好的字符串按照字符进行遍历,把每一个字符转化成Unicode编码,看看这些编码是不是Unicode的支持范围极客。

如果发现有种编码方式都是可打印字符,那么再使用本步骤:对字符串进行分词,分词这个在此不作赘述,你自己再研究一下。分词效果好的就是最可能的编码了。(不过通常到第三步就能搞定了,第四部绝大部分用不着)

楼上全是傻X, 这样没有的,使用开源组件吧detector.jar

用法很简单

/*------------------------------------------------------------------------  

  detector是探测器,它把探测任务交给具体的探测实现类的实例完成。  

  cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法  

  加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。    

  detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的  

  字符集编码。  

--------------------------------------------------------------------------*/  

CodepageDetectorProxy detector =   CodepageDetectorProxy.getInstance()   

/*-------------------------------------------------------------------------  

  ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于  

  指示是否显示探测过程的详细信息,为false不显示。  

---------------------------------------------------------------------------*/  

detector.add(new ParsingDetector(false))    

/*--------------------------------------------------------------------------  

  JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码  

  测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以  

  再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。  

---------------------------------------------------------------------------*/    

detector.add(JChardetFacade.getInstance())   

//ASCIIDetector用于ASCII编码测定   

detector.add(ASCIIDetector.getInstance())   

//UnicodeDetector用于Unicode家族编码的测定   

detector.add(UnicodeDetector.getInstance())   

java.nio.charset.Charset charset = null   

File f=new File("E://specialCar//test.csv")   

try {   

      charset = detector.detectCodepage(new BufferedInputStream(new FileInputStream(f)),100)   

} catch (Exception ex) {ex.printStackTrace()}   

if(charset!=null){   

     System.out.println(f.getName()+"编码是:"+charset.name())   

}else{  

    System.out.println(f.getName()+"未知")  

}

采纳哈