java中字符编码问题
public class Test1 {
public static void main(String[] args) {
int i='国';
System.out.println(i);
//输出结果为22269,不明白为什么
}
}
------解决方案--------------------java中所有的字符和字符串都是以unicode编码的,下面的链接是我找的一个汉字的unicode编码表
http://www.cnblogs.com/whiteyun/archive/2010/07/06/1772218.html
国的unicode编码是56fd,16进制的56fd=5*16^3 + 6* 16^2 + 15 * 16^1 + 13 = 22269
------解决方案--------------------
汉字是Unicode码,字母的Unicode码和ASCII码值是相同的。
------解决方案--------------------UniCode编码规范:以两个字节为单位(Unicode 是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码;当然你也可以将Unicode二进制编码转化为8,10,16,32进制)
UniCode编码规范统一了多种编码方式相互转化的问题,将世界上所有的符号(中文字符、英文符号、日文符号、阿拉伯文符号)等等全部定义进入Unicode编码规范中,并将所有的符号全部按照16位(双字节)来存储。
比如,“国”字unicode是22269,转换成16进制就是56FD,“军”字unicode是20891,转换成16进制就是519B。
你可以看一下这篇文章-----点这里
------解决方案--------------------JAVA中字符类型都是2字节,按照UTF-16编码。
国字是 01010110 11111101
你把它赋给int类型,int类型为4字节,需要强制在高位补零2个字节,也就是:
00000000 00000000 01010110 11111101
等于 22269