字符编码
GBK:Windows系统默认的字符集,含2万多汉字
GB2312:仅含0.67万汉字,
ISO-8859-1:国际通用,兼容多国的语言编码。
以上三者的区别参考: http://www.cnblogs.com/x_wukong/p/3675832.html
UTF-8:国际通用,二进制(一个中文=2个字节)
UNICode:Java采用的编码,十六进制(一个中文=3个字节)
以上两者的区别详细参考: https://www.zhihu.com/question/23374078
UNICode的出现,是为了解决因各国都有一套自己的编码标准而导致的互不兼容的问题(这个时候貌似互联网还没出现,兼容问题主要体现在要使用某一软件,必须下载与该软件使用的编码相同的系统,所以可以认为UNICode解决了本地兼容问题)。
后来互联网出现,为了解决UNICode如何在网络中传输的问题,UTF系列编码标准就出现了,UTF——USC Transfer Format(面向传输),这是为传输而设计的编码,其中UTF-8是目前使用最广泛的UNICode的一种实现方式。
String encodeValue = o.toString(); try { encodeValue = new String(encodeValue.getBytes("gb2312"), "iso-8859-1"); if (encodeValue.length() > length) { return false; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); return false; } //1. encodeValue.getBytes("gb2312"), 将encodeValue按照gb2312取出 //2. new String(... , "iso-8859-1"), 将取出的gb2312转化为iso-8859-1编码的
public static void gbk_test() {
try {
String sss = "里".toString();
sop("gbk编码下,一个汉字的长度" + sss.length()); // 1个字节
String encodeValue = new String("里".getBytes(), "gb2312");
sop("gb2312编码下,一个汉字的长度" + encodeValue.length()); // 2个字节
encodeValue = new String(encodeValue.getBytes("gb2312"), "iso-8859-1");
sop("iso-8859-1编码下,一个汉字的长度" + encodeValue.length()); // 2个字节
} catch (UnsupportedEncodingException
e) {
e.printStackTrace();
return;
}
}
str.getBytes() 和 Integer.toBinaryString(str)的区别:
String para1 = new String("English英文"); byte[] result1 = para1.getBytes(); int para2 = 4; String result2 = Integer.toBinaryString(para2); for (byte b : result1) System.out.print(b + " "); sop(""); sop(result2);
输出结果:
69 110 103 108 105 115 104 -24 -117 -79 -26 -106 -121
100
getBytes():只能被String调用,返回 Byte 型数组 。(byte数组的每一项都是字符串中每一个字符在相应编码字符集中的序号,亦即编码)
toBinaryString:参数只能是 int 型的,返回 String 。(输出结果是参数的二进制表示)