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

createh55个月前 (01-26)技术教程50

(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字符编码格式)

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

java基础——字符与字节的区别(字符 字节 区别)

字符与字节的区别1、计算机存储信息的最小单位,称之为位(bit),音译为比特,二进制的一个“0”或一个“1”叫一位。2、计算机存储容量基本单位是字节(Byte),音译为拜特,8个二进制位组成1个字节。...

Socket粘包问题的3种解决方案,最后一种最完美

在 Java 语言中,传统的 Socket 编程分为两种实现方式,这两种实现方式也对应着两种不同的传输层协议:TCP 协议和 UDP 协议,但作为互联网中最常用的传输层协议 TCP,在使用时却会导致粘...

又被“教育”了,Java中那些让我傻傻分不清楚的7个小细节

前言最近我们通过sonar扫描代码的时候,发现了很多问题。除了常规的bug和安全漏洞之外,还有几处方法用法错误,引起了我极大的兴趣。我为什么会对这几个方法这么感兴趣呢?因为它们极具迷惑性,可能会让我们...

C#入门教程(三)–接收用户输入、转义字符、类型转换-打造C

上次教程主要讲解了visual stdio快捷键、变量相关的知识。具体教程戳这里:http://www.chengxiaoxiao.com/net/1027.html越来越深入去写教程越来越发现,自己...

Java中你知道几种从字符串中找指定的字符的数量

遇到这样的问题,常规的思路估计就是遍历String,然后逐个对比。下面先看循环遍历循环遍历private static int getNum(String originStr, String targ...