Java语言常用知识点之字符编码部分

createh52个月前 (01-26)技术教程19

(1)Unicode

Unicode是为整合全世界的所有语言文字而诞生的。任何字符在Unicode中都对应一个值。这个值就可以称为这个字符的Unicode值。

(2)UCS-2和UCS-4

Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(Code Point)。代码点的值通常写成 U+ABCD 的格式。而文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。顾名思义,UCS-2是用两个字节来表示代码点,其取值范围为U+0000~U+FFFF。为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中U+00000000~U+0000FFFF和UCS-2是一样的。要注意,UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。

(3)UTF-16

UTF-16是完全对应于UCS-2的,即把UCS-2规定的代码点通过Big Endian或Little Endian方式直接保存下来。所以UTF-16采用2个字节来存储Unicode。UTF-16也可以表示UCS-4的部分字符,所以UTF-16也采用4个字节来存储Unicode。

(4)UTF-8

通常情况下,UTF-16统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要用两个字节表示,存储空间放大了一倍,而在网络带宽还非常有限的情况下,这样会增大网络传输的流量,而且也没有必要。而UTF-8采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以由1-6个字节组成。
UTF-8的编码规则是:
第一:如果一个字节,最高位(第8位)为0,表示这是一个ASCII字符(00-7F)。可见,所有的ASCII编码已经是UTF-8了。
第二:如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节。
第三:如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节。
关注【Java人生】,关注Java,关注人生。关注Java的魅力,关注人生的多彩!

相关文章

Java 字节流和字符流是什么?怎么用?

Java IO提供了两种流:字节流(byte stream)和字符流(character stream)。字节流用于处理二进制数据,而字符流则用于处理文本数据。Java字节流用InputStream(...

JAVA快速入门——输入和输出(java输入输出是什么)

输出如果你看过快速入门第一篇,就会注意到下面的代码,向屏幕输出 Hello WorldSystem.out.println("Hello World")println是print line的缩写,输出...

几行 Java 代码搞定图片提取文字功能

近日浏览网上一些图片提取文字的网站,觉得甚是有趣,花费半日也做了个在线图片识别程序,完成了两个技术方案的选择,一是 tesseract + Python flask的方案实现,二是 tesserac...

java安全编码指南之:字符串和编码

简介字符串是我们日常编码过程中使用到最多的java类型了。全球各个地区的语言不同,即使使用了Unicode也会因为编码格式的不同采用不同的编码方式,如UTF-8,UTF-16,UTF-32等。我们在使...

Java数据类型中,字符型char变量能存一个中文汉字吗,为什么?

char可以存储一个中文汉字,因为Java中使用的编码是Unicode,一个char类型占2个字节(即16比特),所以放一个中文是没问题的。 Unicode编码意味着字符在JVM内部和外部有不同的表现...

JAVA字符编码和字符集详解(java字符编码格式)

一、JAVA字符集 Java标准字符集:所谓Java标准字符集,就是Java平台支持的字符集:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16。 U...