java为了国际通用,使用的unicode字符集,但是字符的表示却需要字符的编码方式,就是我们常见的GBK,UTF-8之类的,今天看到别人的博客,自己也想再次探秘一下一直困惑着我的字符编码问题.
public class TestCode{ public static void main(String [] args){ String name="胡"; char c_name = name.charAt(0); int lowByte = (c_name)&0xff; int highByte = (c_name>>8)&0xff; System.out.println(Integer.toHexString(highByte)+" "+Integer.toHexString(lowByte)); try{ byte[] bt = name.getBytes("utf-16be");//编码 printByte(bt); }catch(Exception e){ } } public static void printByte(byte[] bt){ try{ String str = new String(bt,"utf-16be");//解码 System.out.println(str); }catch(Exception e){ } for(int i=0;i<bt.length;i++){ int hex = (int)bt[i]&0xff; System.out.print(Integer.toHexString(hex)+" "); } System.out.println(); System.out.println("length="+bt.length); } }
在编码处使用不同的字符编码方式,汉字编码后的字节情况为:
iso-8859-1 一个字节值为3f,是问号的编码,相信大家在开发时候是经常遇见的.
gbk,gb2312是两个字节.
utf-8是3个字节
utf-16是4个字节(当使用utf-16编码英文字符时候也会占用两个字节,其他编码方式都是1个字节)
utf-16be编码的字符是两个字节(英文字符或者汉字),不过编码后的字节是先低后高字节.
utf-16le我个人认为应该是java本身保存字符使用的编码,应为java定义char型数据为两个字节,所以即便是
定义汉字用此编码也是两个字节,而且编码后的字节是先高后低字节
类似汉字在应用程序中经常出现编码的原因我认为只要确保一个原则就可以解决了,那就是在编码跟解码处的
编码方式一定要一样.所以从数据库里读到页面上的数据就需要变换数据的编码方式.总是保证编解码一致就
应该可以正确显示.
小弟自己写代码总结的,班门弄斧了,有不对的地方请大家多批评,渴望交流,渴望高手指点.