ASCII码表

字符编码

今天老师讲到乱码解决的问题时,听的一头雾水,突然发现自己对字符编码没有很好掌握,再次翻过头来在 复习一遍字符编码。

字符:
java字符使用unicode编码表来表示字符,

ASCII码表:
(American standard code information interchange)美国标准信息交换码,7位表示一个字符,
包含英文字母数字以及常用符号。
ISO8859-1:拉丁码表,8位表示一个字符,最高位补1。不能表示汉字。

gb2312:中文码表,两个字节表示一个字符。
UTF-8:
最多用三个字节表示一个字符,字节最高位以0开头标识用一个字节表示一个字符。
        第一个字节最高位以110开头,第二个字节最高位以10开头标识用两个字节表示一个字符。
第一个字节最高位以1110开头,第二个和第三个字节最高位以10开头,表示用三个字节表示一个字符
UTF-8编码可参考API文档中DataInput接口中关于UTF-8的描述。


编码与解码代码示例:
/*
		如果编码编错了就没办法解码了(比如,用iso8859-1编码了中文)因为它已经确定了编码没办法改变,如果解码解错了在编一次码在进行正确解码
		对中国进行ios8859-1编码,它会将中国两个字符每一个字符用一个字节来表示。*/
		byte[] b1 = "中国".getBytes("iso8859-1");
		System.out.println("iso8859-1编码:"+Arrays.toString(b1));
		//对汉字“中国”进行本地字符编码也就是gb2312,每个汉字字符用两个字节表示
		byte[] bytes = "中国".getBytes();
		//对默认gb2312编码的字符串进行iso8859-1进行解码,
		//因为gb2312编码后用四个字节来表示,iso8859-1用一个字节来表示一个字符,解码会表示为四个乱码字符
		//因为解码不会对二进制数据产生影响,所以现在虽然没有解码成功但是字符的二进制数据还是原来的。
		String str1 = new String(bytes,"iso8859-1");
		System.out.println("iso8859-1解码:"+Arrays.toString(bytes)+":"+str1);
		//对上面解析的四个乱码字符重新进行编码,因为四个字符是由iso8859-1解码得来的所以还会得到原来的字节数组
		byte[] b2 = str1.getBytes("iso8859-1");
		System.out.println("iso8859-1编码:"+Arrays.toString(b2));
		/*将字节数组按照本地编码解码,因为字符编码二进制数据从来没发生改变,所以可以成功解码
		 * 例如tomcat服务器会将gbk编码默认按照iso8859-1解码,所以可以在进行iso8859-1编码,
		 * 在用本地编码进行解码
		*/
		String result = new String(b2);
		System.out.println(result);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值