Java课程——让人头疼的字符编码:ASCII,Unicode和UTF系列

来简单了解一下,让人头疼的字符编码:ASCII,Unicode和UTF

在计算机中,所有的东西最终都归为二进制。每一个二进制位(bit)都只有0和1两种状态。八个二进制位就可以组成256种状态,也就是字节(Byte)。所以,有几个二进制位,就可以表示2的n次方种不同的状态。

如果用128种状态(七个二进制位),每个状态对应一个符号,那就可以有128种符号。

一、ASCII码

ASCII码是美国制定的一套字符编码,统一规定了英文字符与二进制位的关系。ASCII码一共规定了128个字符的编码,它只占用了一个的字节的后面7位,最前面以为统一规定位0
在这里插入图片描述
对于英文来说,128个符号编码足够了,但对于其他语言来说,是远远不够的。所以,存在这样一种编码,将世界上所有的符号都包含在里面,每一个符号都有独一无二的编码。这样的编码叫Unicode,这是一种所有符号的编码,所以它也叫万国码。

二、Unicode

Unicode为世界上的所有字符都分配了一个唯一的数字编号,这个编号范围从0x000000到0x10FFFF(十六进制),具体的可以查阅unicode.org。
在这里插入图片描述
Unicode涵盖了所有的符号,但是它只是一个符号集,只规定了符号的二进制代码,却没有规定这个二进制代码应该如果储存。实际上,有很多种实现方式,UTF-8、UTF-16、UTF-32……都是 Unicode编码 的一种实现。

三、UTF-8

UTF-8是在互联网上使用最广的一种Unicode的实现方式,其他方式还包括UTF-16(字符用两个字节或四个字节表示),UTF-32(字节用四个字节表示)。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1-4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则有两条:

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。对于英语字母来说,UTF-8和ASCII是相同的
  • 对于n字节的符号,第一个字节的前n都都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部位这个符号的Unicode码。
Unicode符号范围(十六进制)UTF-8编码方式(二进制)
0000 0000-0000 007F0xxxxxxx
0000 0080-0000 07FF110xxxxx 10xxxxxx
0000 0800-0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

其实解读UTF-8编码非常简单:如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

参考Blog:

https://blog.youkuaiyun.com/qq_36761831/article/details/82291166
https://blog.youkuaiyun.com/Deft_MKJing/article/details/79460485#commentBox
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值