java 字符集检测_JAVA字符编码测试

几点注意:

1,ASCII码和ISO-8859-1都是单字节编码,ASCII码能表示128个字符,ISO-8859-1总共能表示256个字符。都不能表示中文,如果中文字符或其它不在IOS-8859码值范围内的字符会统一用3f表示(显示为"?", 通常所说的"黑洞");

2,GBK兼容GB2312,是双字节编码,GB2312包含6763个汉字,GBK包含21003个汉字;

3,UTF-16为定长双字节编码,大大简化了字符串的操作,但是会浪费存储空间。JAVA以UTF-16作为内存存储格式(见编码测试输出source行);

4,UTF-8采用变长,不同类型的字符可以由1~6个字节组成(汉字一般3个字节)。UTF-8规则如下:

如果是1个字节,最高位(第8位)为0,则表示这是1个ASCII字符(00~7F)。可见,所有的ASCII编码已经是UTF-8了。

如果是1个字节,以11开头,则连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节。

如果是1个字节,以10开头,表示它不是首字节,则需要向前查找才能得到当前字符的首字节。

测试代码:

packagecom.test.main;public classTestCode {public static voidencode(){

String name= "淘!我喜欢!";

toHex(name.toCharArray());

String [] codeType= {"ISO-8859-1", "GB2312", "GBK", "UTF-16", "UTF-8"};for(String type : codeType) {try{byte [] bytes =name.getBytes(type);

toHex(type, bytes);

}catch(Exception e) {

e.printStackTrace();

}

}

}private static void toHex(String name, byte[] charArray) {

System.out.print(String.format("%-15s", name + ":"));for (int i = 0; i < charArray.length; i++) {

System.out.print(String.format("%-4x ", charArray[i]));

}

System.out.println();

}private static void toHex(char[] charArray) {

System.out.print(String.format("%-15s","source:"));for (int i = 0; i < charArray.length; i++) {

System.out.print(String.format("%-4x ", (int)charArray[i]));

}

System.out.println();

}public static voidmain(String[] args) {

encode();

}

}

输出:

zeqsxrGX3E7WetA47R0+p3XE6X+swyPKGaYZ0UnSoMqaYhowbU0qkXAYAAAAAgCfIZQAAAAAAE+QyAAAAAIAJchkAAAAAwAS5DAAAAABgglwGAAAAADBBLgMAAAAAmCCXAQAAAABMkMsAAAAAACbIZQAAAAAAE+QyAAAAAIAJchkAAAAAwAS5DAAAAABgglwGAAAAADBBLgMAAAAAmPwf29xR8laU6yMAAAAASUVORK5CYII=

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值