博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我理解的几种字符编码方式
阅读量:6197 次
发布时间:2019-06-21

本文共 1630 字,大约阅读时间需要 5 分钟。

  1. ANSII  这个是最基础的,只占用1个字节,反正键盘上能看到的显示的字符都能表示出来,范围是0x00~0x7F,保存英文字符够用了!后来,估计是觉得不够用,把128~255也扩展了出来。
  2. ANSI   是ANSII的扩展,因为ANSII只能表示所有的英文和英文标点符号,完全没有考虑广大非英文国家人的感受。所以就做了扩展(貌似是windows),每个国家的文字是不同的, 所以各个国家也就定义了自己的编码格式和规则。比如中国(简体中文),就使用GB2312编码格式,而台湾(繁体中文),就使用了Big5编码方式。中国汉字原来用GB2312原来也挺好的,但是中国博大精深,汉字太多,又做了扩展,变为了GBK,后来还是不够用,又扩大到了GB18030。各个国家之间是完全不互通的。也就是说同样是ANSI编码,一份文件中,有两种编码方式,GB2312,和Big5,自然有一部分乱码。
  3. Unicode ANSI出来以后,混乱了一篇,国际标准化组织就看不下去了,推出了全世界统一的编码规则,这个时候就出现了Unicode,但是Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是说unicode规定了全世界所有的文字的编码,每个字(无论中文,英文,埃及文,爱斯基摩文)都有一个唯一的编号,但是英文原来用ANSII编码的时候只需要1个字节就够了,但是用Unicode,可能需要3~4个字节,这个让很多英文国家立马不爽了!有没有办法统一了,怎么办呢,UTF-8编码方式就出现了。
  4. UTF-8是Unicode编码的一种编码方式,它是一种变长的编码方式,当然也有其他格式的Unicode的编码方式(UTF-16,UTF-32...),但是这些都不常用,在互联网世界中最常用的就是这种编码方式了。UTF-8虽然是Unicode编码的的一种编码方式,但是对于n个字节的编码(n>1),两者编出来的码却是不相同的。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式

(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

下面是我在网上找到的一个例子:

下面,还是以汉字“严”为例,演示如何实现UTF-8编码。已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。

转载于:https://www.cnblogs.com/lh-ty/p/6887964.html

你可能感兴趣的文章
泛型和面向对象C++
查看>>
【版本号公布】Jeecg-P3 1.0 公布,J2EE微服务框架(插件开发)
查看>>
Play Framework, Server Sent Events and Internet Explorer
查看>>
TWS日志查看
查看>>
04-树4. Root of AVL Tree (25)
查看>>
数独1--暴力回溯法(时间超)
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)
查看>>
Servlet的部署开发细节以及注意事项
查看>>
iOS 多线程技术2
查看>>
查看喜爱球队一周比赛安排
查看>>
C语言结构体及函数传递数组參数演示样例
查看>>
linux下向一个文件中的某行插入数据的做法
查看>>
JavaSe:Comparator
查看>>
一个想法照进现实-《IT连》创业项目:一个转折一个反思
查看>>
【POJ 3071】 Football(DP)
查看>>
LinkedIn实时低延迟数据抓取系统Databus开源
查看>>
java程序员必知的8大排序
查看>>
写给一直在背锅的你
查看>>
springcloud(七):配置中心svn示例和refresh
查看>>
快速高效掌握企业级项目中的Spring面向切面编程应用,外带讲面试技巧
查看>>