用一个实例来说明汉字如何转换为对应的字节。
中文编码是UNIQUE编码,即2个字节标识一个汉字;
如:我 = byte[] bs3 =new byte[]{-50,-46} = GBK编码10进制为52946。
如:
String str2 = "我";
byte[] bs2 = str2.getBytes("gbk");
我用gbk编码后的字节为:byte[] bs2 = new byte[]{-50,-46}
中间计算机做了什么呢!
1 我转换为字符“我”
2 找到相应的编码表 ,即gbk的编码表,然后拿到编码表对应 “我” 的二进制数值,
3 二进制数字解析为2个字节,字节1的十进制为=-50,字节2的十进制为=-46
4 返回两个字节的数组=bs2
将bs2转换为“我”这个汉字:
1 计算-50对应的二进制数值="11001110"(补码)
计算方式:String tString = Integer.toBinaryString((-50 & 0xFF) + 0x100).substring(1);
Java & 0xff:https://wenku.baidu.com/view/e454c202ed630b1c59eeb5ea.html
2 计算-46对应的二进制数值="11010010"(补码)
计算方式:String tString = Integer.toBinaryString((-50 & 0xFF) + 0x100).substring(1);
3 拼接两个字节为=1100111011010010=52946
转换地址:http://tool.oschina.net/hexconvert/
4 查找“我”GBK编码10进制数值是52946,正好与上面相等
汉字与编码转换:http://www.mytju.com/classcode/tools/encode_gb2312.asp
String str2 = "我"; // char a = str.charAt(0); byte[] bs = str2.getBytes("utf-8"); byte[] bs2 = str2.getBytes("gbk"); // -50,-46 我 byte[] bs3 =new byte[]{-50,-46,97,1}; System.out.println(new String( bs3,"gbk")); System.out.println( "111"); System.out.println( (-50 & 0xFF) ); String tString = Integer.toBinaryString((-50 & 0xFF) + 0x100); String tString2 = Integer.toBinaryString((-46 & 0xFF) + 0x100).substring(1); System.out.println(tString +" "+tString2 );
org.springframework.util.ObjectUtils :对象操作的工具类,判null,isArray,containsElement,hashCode,nullSafeToString