手记

【Java核心技术卷】深入理解Java的char类型

关于char类型

要介绍char类型肯定离不开Unicode编码.
但是你或许也听说过ACSII编码,那在这里,我们也一起探讨他们的关系吧,这样能更好的理解Unicode编码

ASCII的介绍

ASCII 是用来表示英文字符的一种编码规范。每个ASCII字符占用1 个字节,因此,ASCII 编码可以表示的最大字符数是255(00H—FFH)。这对于英文而言,是没有问题的,一般只什么用到前128个(00H–7FH,最高位为0)。而最高位为1 的另128 个字符(80H—FFH)被称为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其它符号
**但是对于中文等比较复杂的语言,255个字符显然不够用。**于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312—80”, 它是和ASCII 兼容的一种编码规范, 其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII 字符来表示,以区分ASCII 码部分。
但是这个方法有问题,最大的问题就是中文的文字编码和扩展ASCII 码有重叠。而很多软件利用扩展ASCII 码的英文制表符来画表格,这样的软件用到中文系统中,这些表格就会被误认作中文字符,出现乱码。另外,由于各国和各地区都有自己的文字编码规则,它们互相冲突,这给各国和各地区交换信息带来了很大的麻烦。

UNICODE的产生

要真正解决这个问题,不能从扩展ASCII 的角度入手,Unicode作为一个全新的编码系统应运而生,它可以将中文、法文、德文……等等所有的文字统一起来考虑,为每一个文字都分配一个单独的编码。
下面是比较正式的介绍

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。


那么回归到Java的char类型

例如: 'A’是编码值为65所对应的字符常量,'a’是编码值为97对应的字符常量.

char类型原本表示单个字符,如今有些Unicode字符可以用一个char值描述,另一些则可以用两个char值表示

在Java中,char类型描述了UTF-16编码的一个代码单元,char类型的值可以表示为十六进制值,其范围从\u0000 - \ufff

UTF-16是Unicode字符编码五层次模型的第三层:字符编码表(Character Encoding Form,也称为 “storage format”)的一种实现方式。

当然 除了转义序列\u
注意:\ 为转义字符 所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而Java中定义了一些字母前加 “\” 来表示常见的那些不能显示的ASCII字符,如\r,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

还有其他比较常见的特殊字符的转义序列:

转义序列 名称 Unicode值
\b 退格 \u008
\t 制表 \u009
\n 换行
\ 反斜杠 \u005c\

看好了 反斜杠怎么
Linux操作系统和Windows操作系统文件路径的斜杠是不一样的 对应的分别是斜杠,反斜杠

<Core Java Volume I - Fundamentals> 中强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元,最好将字符串作为抽象数据类型处理

0人推荐
随时随地看视频
慕课网APP