关于java的String的编码的各种情况测试代码

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Collection;

import javax.xml.bind.DatatypeConverter;

import org.apache.commons.io.FileUtils;

import com.google.common.io.BaseEncoding;

public class testCmd {
	public static boolean isString(String sourceString, String codec) 
	{
		  byte[]     temp;  
		  try 
		  {
			  temp  =   sourceString.getBytes(codec);
			  String   compstring;  
			  compstring   =   new   String(temp);   
			  if(sourceString.equals(compstring))  
			  {  
			        return true;  
			  }
		  } 
		  catch (UnsupportedEncodingException e) 
		  {
			e.printStackTrace();
		  }  
		  return false;
	}
	
	public static String guessEncoding(byte[] bytes) 
	{  
	    String DEFAULT_ENCODING = "UTF-8";  
	    org.mozilla.universalchardet.UniversalDetector detector =  
	        new org.mozilla.universalchardet.UniversalDetector(null);  
	    detector.handleData(bytes, 0, bytes.length);  
	    detector.dataEnd();  
	    String encoding = detector.getDetectedCharset();  
	    detector.reset();  
	    if (encoding == null) {  
	        encoding = DEFAULT_ENCODING;  
	    }  
	    return encoding;  
	}
	public static void main(String[] args) throws IOException
	{
		System.out.println("start");
		byte[] arr= {(byte) 0x31,(byte) 0xb9,(byte) 0xfe};
		String str=new String(arr,"gbk");
		
		System.out.println("编码:"+guessEncoding(arr));
		System.out.println("编码:"+guessEncoding(str.getBytes("gbk")));
		System.out.println("编码:"+guessEncoding(str.getBytes("utf-8")));
		System.out.println("编码:"+guessEncoding(str.getBytes("unicode")));
		if(isString(str,"utf-8"))
		{
			System.out.println("utf-8:"+str);
		}
		
		if(isString(str,"gbk"))
		{
			System.out.println("gbk:"+str);
		}
		
        byte[] packArray=str.getBytes();
        String strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        packArray=str.getBytes("utf-8");
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        packArray=str.getBytes("gbk");
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        byte[] arr1= {(byte) 0x54,(byte) 0xc8};
        String str2=new String(arr1,"unicode");
        System.out.println("编码2:"+guessEncoding(arr1));
        System.out.println("编码2:"+guessEncoding(str2.getBytes("utf-8")));
        System.out.println("编码2:"+guessEncoding(str2.getBytes("unicode")));
        packArray=str2.getBytes("unicode");
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        packArray=str2.getBytes("utf-8");
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        packArray=str2.getBytes("gbk");
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        String str3="123哈";
        packArray=str3.getBytes();
        System.out.println("编码3:"+guessEncoding(str3.getBytes("gb2312")));
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        packArray=str3.getBytes("utf-8");
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        
        String strt="3C61707069643D38653238333500";
        byte[] pa=BaseEncoding.base16().decode((String)strt);
        System.out.println("编码3:"+guessEncoding(pa));
        
        String strt1="3C617000";
        byte[] pa1=BaseEncoding.base16().decode((String)strt1);
        System.out.println("编码33:"+guessEncoding(pa1));
        
        byte[] arr3= {(byte) 0x31,(byte) 0xE5,(byte) 0x93,(byte) 0x88};
        String str4=new String(arr3);
        System.out.println("send data:"+str4);
        System.out.println("编码2:"+guessEncoding(arr3));
        System.out.println("编码2:"+guessEncoding(str4.getBytes("utf-8")));
        System.out.println("编码2:"+guessEncoding(str4.getBytes("unicode")));
        packArray=str4.getBytes();
        strHex = DatatypeConverter.printHexBinary(packArray);  
        System.out.println("send data:"+strHex);
        System.out.print("OK");
	}
}


start
编码:WINDOWS-1252
编码:WINDOWS-1252
编码:UTF-8
编码:UTF-16BE
utf-8:1哈
send data:31E59388
send data:31E59388
send data:31B9FE
编码2:WINDOWS-1252
编码2:UTF-8
编码2:UTF-16BE
send data:FEFF54C8
send data:E59388
send data:B9FE
编码3:WINDOWS-1252
send data:313233E59388
send data:313233E59388
编码3:UTF-8
编码33:UTF-8
send data:1哈
编码2:UTF-8
编码2:UTF-8
编码2:UTF-16BE
send data:31E59388
OK
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值