字符和编码简单入门
字符和编码入门
1. 字符(Base Java)
- char存储字符。表示System.Char 类型的一个实例。
Java使用Unicode来表示字符。 - 使用Unicode简化了全球应用程序的开发。
- Unicode可以表示在所有人类语言中找到的所有字符。
- Java char是16位类型。
2. 字符编码
由于我们的文字中存在着大量的重复字符,而计算机天生就是用来处理数字的,为了减少我们需要保存的信息量,我们可以使用一个数字编码来表示每一个字符,通过对每一个字符规定一个唯一 的数字代号, 然后,对应每一个代号,建立其相对应的图形,这样,在每一个文件中,我们只需要保存每一个 字符的编码就相当于保存了文字,在需要显示出来的时候,先取得保存起来的编码,然后通过编码表,我们可以查到字符对应的图形,然后将这个图形显示出来,这样我们就可以看到文字了,这些用来规定每一一个字符所使用的代码的表格,就称为编码表。编码就是对我们日常使用字符的一种数字编号。
3. ASCII 美国信息交换标准代码
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符
image.png4. 使用Java代码的字符例子
4.1 字符转换
public class main {
public static void main(String args[]) {
//1. 打印字符
char c = 'A';
System.out.println(c);
//2. 字符和整数转
System.out.println((int)c);
//3. 数字到字符
System.out.println((char)'\u0041');
}
}
A 65 A
4.2 打印所有ASCII
public class main {
public static void main(String args[]) {
printAscii();
}
static void printAscii(){
for (int i = 0; i < 128; i++) {
if (i % 10 == 0) {
System.out.println();
}
System.out.print(String.format("%3d:%c ", i, (char)i));
}
}
0: 1: 2: 3: 4: 5: 6: 7: 8 9:
10:
14: 15: 16: 17: 18: 19:
20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
30: 31: 32: 33:! 34:" 35:# 36:$ 37:% 38:& 39:'
40:( 41:) 42:* 43:+ 44:, 45:- 46:. 47:/ 48:0 49:1
50:2 51:3 52:4 53:5 54:6 55:7 56:8 57:9 58:: 59:;
60:< 61:= 62:> 63:? 64:@ 65:A 66:B 67:C 68:D 69:E
70:F 71:G 72:H 73:I 74:J 75:K 76:L 77:M 78:N 79:O
80:P 81:Q 82:R 83:S 84:T 85:U 86:V 87:W 88:X 89:Y
90:Z 91:[ 92:\ 93:] 94:^ 95:_ 96:` 97:a 98:b 99:c
100:d 101:e 102:f 103:g 104:h 105:i 106:j 107:k 108:l 109:m
110:n 111:o 112:p 113:q 114:r 115:s 116:t 117:u 118:v 119:w
120:x 121:y 122:z 123:{ 124:| 125:} 126:~ 127:�
5. 扩展ASCII – ISO8859-(1-9)
由于ASCII 的限制性,西欧各国制定了ISO-8859 编码。
ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
此字符集支持部分于欧洲使用的语言。
包括阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、法罗语、弗里西语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语及瑞典语。
image.png6. 中文编码
- GB2312
GB/T 2312,GB/T 2312–80 或 GB/T 2312–1980 是中华人民共和国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,通常简称GB(“国标”汉语拼音首字母),又称GB0,由中国国家标准总局于1980年发布,1981年5月1日实施。GB/T 2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB/T 2312。
- GBK
汉字内码扩展规范,称GBK,全名为《汉字内码扩展规范(GBK)》1.0版,由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司和电子工业部科技与质量监督司1995年12月15日联合以《技术标函[1995]229号》文件的形式公布。 GBK共收录21886个汉字和图形符号,其中汉字(包括部首和构件)21003个,图形符号883个。
- GB 18030
全称《信息技术 中文编码字符集》,是中华人民共和国国家标准所规定的变长多字节字符集。其对GB 2312-1980完全向后兼容,与GBK基本向后兼容,并支持Unicode(GB 13000)的所有码位。GB 18030共收录汉字70,244个。
7. Unicode
Unicode,中文又称万国码、国际码、统一码、单一码,是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。
Unicode伴随着通用字符集的标准而发展,同时也以书本的形式[1]对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2020年3月公布的13.0.0[2],已经收录超过13万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的资料除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。
- Unicode是为了解决传统的字符编码方案的局限而产生的
- 它为每种语言中的每个字符设定了统一并且唯一的二进制编码
- Unicode 占 2 个字节
- 最大值 0xFFFF
7.1 汉字Unicode范围
image.png8. 打印所有unicode
static void printUnicode() {
StringBuilder sb = new StringBuilder();
for(int i=0; i< 0xFFFF; i ++) {
if (i % 50 == 0) {
sb.append("\r\n");
}
sb.append(String.format("%3c", (char)i));
}
System.out.print(sb);
}
9. UTF
-
UTF,是Unicode Transformation Format的缩写
UTF 是 为了解决已有字符集不支持unicode的方案. 是一种针对Unicode的可变长度字符编码
意为Unicode转换格式 -
UTF-8是UTF中最常用的转换格式
是UNICODE的一种变长字符编码
现在已经标准化为RFC 3629
被广泛使用 -
其它UTF编码
UTF-8、UTF-16、UTF-3 、 UTF-7 等,不一一赘述.