字节、字符、ASCII码、UTF-8编码
介绍
计算机只能识别01二进制数字,为了使计算机能够读懂我们人类自然语言,美国科学家就定义了ASCII码值,比如用二进制01100001(97)表示英文字符’a’。由于英文字符比较少,用一个字节(3bit可以表示128种情况)就可以表示了,但是其它国家的文字字符可能有成百上千所以使用一个字节是无法表示的,因为为了都能表示全世界各国的文字,采用UTF-8的3个字节来表示一个字符。每一种字符集编码都有自己的一张码表。
程序案例
中文汉字utf-8占三个字节演示
//中文汉字的utf-8一个字符占三个字节
String englishString = "hello";
byte[] bytes1 = englishString.getBytes("utf-8");
System.out.println(bytes1.length);// 字节数组长度为5
String chineseString = "你好";
byte[] bytes2 = chineseString.getBytes("utf-8");
System.out.println(bytes2.length);// 字节数组长度为6
英文字符字节就是对应的ASCII码值
String englishString = "hello";
byte[] bytes1 = englishString.getBytes("utf-8");
for (int i = 0; i < bytes1.length; i++) {
System.out.println(bytes1[i]);
}
//104、101、108、108、111(分别对应hello每个字符对应的ASCII码值)
备注:网络传输传输的其实就是字节流(字节数组),先指定编码格式,然后类似ASCII码那样寻找对应的字符进行解码。
参考
http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
http://tgideas.qq.com/webplat/info/news_version3/804/808/811/m579/201307/218730.shtml
https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/