经过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
使用平台的默认字符集,这句话怎么理解?
Properties p = System.getProperties();
System.out.println(p.get("file.encoding"));//输出GBK
实际上构造字符串的时候又是根据ASCII码表,代码如下::
byte[] arr = {65,66,67,68};
System.out.println(new String(arr));//输出ABCD
这个怎么回事呢??谢谢赐教
------解决方案--------------------
------解决方案--------------------
结果 65 66 67 68
猜测ASCII码范围内的字符,不受编码类型的影响。
------解决方案--------------------
我们常见的很多字符集中,在0~127这个范围也就是最早的ASCII范围内,是和ASCII完全或部分兼容的。
至少在常见的可见字符(也就是键盘上那些字母,数字,符号),是和ASCII完全兼容的。
也就是说,这些字符集中,如果遇到二进制的01000001(十进制65,十六进制0x41)这个字节,都代表字母A。
具体到GBK来说,它单字节部分,也就是高位(左边)第一个bit是0的,代表这个字符,只占用1个字节完全和ASCII兼容(UTF-8也是类似的方式)
http://zh.wikipedia.org/wiki/GBK
使用平台的默认字符集,这句话怎么理解?
Properties p = System.getProperties();
System.out.println(p.get("file.encoding"));//输出GBK
实际上构造字符串的时候又是根据ASCII码表,代码如下::
byte[] arr = {65,66,67,68};
System.out.println(new String(arr));//输出ABCD
这个怎么回事呢??谢谢赐教
------解决方案--------------------
String s = "中国人 text here";
byte[] b = s.getBytes("UTF-8");
byte[] c = s.getBytes("GBK");
------解决方案--------------------
String str = "ABCD";
byte[] arr2 = str.getBytes();
for (byte byt : arr2) {
System.out.print(byt+" ");
}
结果 65 66 67 68
猜测ASCII码范围内的字符,不受编码类型的影响。
------解决方案--------------------
我们常见的很多字符集中,在0~127这个范围也就是最早的ASCII范围内,是和ASCII完全或部分兼容的。
至少在常见的可见字符(也就是键盘上那些字母,数字,符号),是和ASCII完全兼容的。
也就是说,这些字符集中,如果遇到二进制的01000001(十进制65,十六进制0x41)这个字节,都代表字母A。
具体到GBK来说,它单字节部分,也就是高位(左边)第一个bit是0的,代表这个字符,只占用1个字节完全和ASCII兼容(UTF-8也是类似的方式)
http://zh.wikipedia.org/wiki/GBK