UTF-8、GB2312、GB18030、GBK和BIG5等字符集编码范围的具体说明


一预备知识 

1,字符:字符是抽象的最小文本单位。 它没有固定的形状(可能是一个字形),而且没有值。 “A”是一个字符,“”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。 “中”“国”这是两个汉字字符。 字符仅仅代表一个符号,没有任何实际值的意义。 

2,字符集:字符集是字符的集合。 例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文和越南文的书写中使用。 这也说明了字符和字符集之间的关系,字符组成字符集(iso8859-1,GB2312/GBK,unicode)。 

3,代码点:字符集中的每个字符都被分配到一个“代码点”。 每个代码点都有一个特定的唯一数值,称为标值。 该标量值通常用十六进制表示。 

4,代码单元: 在每种编码形式中,代码点被映射到一个或多个代码单元。 “代码单元”是各个编码方式中的单个单元。 代码单元的大小等效于特定编码方式的位数: 
UTF-8 :UTF-8 中的代码单元由8 位组成;在UTF-8 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。 代码点将被映射到一个、两个、三个或四个代码单元; 
UTF-16 :UTF-16 中的代码单元由16 位组成;UTF-16 的代码单元大小是8 位代码单元的两倍。 所以,标量值小于U+10000 的代码点被编码到单个代码单元中; 
UTF-32:UTF-32 中的代码单元由32 位组成; UTF-32 中使用的32 位代码单元足够大,每个代码点都可编码为单个代码单元; 
GB18030:GB18030 中的代码单元由8 位组成;在GB18030 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。 代码点将被映射到一个、两个或四个代码单元。 

5,举例: 

“中国北京香蕉是个大笨蛋”这是我定义的aka字符集;各字符对应代码点为: 
北00000001 
京00000010 
香10000001 
蕉10000010 
是10000100 
个10001000 
大10010000 
笨10100000 
蛋11000000 
中00000100 
国00001000 
下面是我定义的zixia 编码方案(8位),可以看到它的编码中表示了aka字符集的所有字符对应的代码单元; 
北10000001 
京10000010 
香00000001 
蕉00000010 
是00000100 
个00001000 
大00010000 
笨00100000 
蛋01000000 
中10000100 
国10001000 
所谓文本文件就是我们按一定编码方式将二进制数据表示为对应的文本如00000001000000100000010000001000000100000010000001000000这样的文件。 我用一个支持zixia编码和aka字符集的记事本打开,它就按照编码方案显示为 “香蕉是个大笨蛋” 
如果我把这些字符按照GBK另存一个文件,那么则肯定不是这个,而是 
1100111111100011 1011110110110110 1100101011000111 1011100011110110 1011010011110011 1011000110111111 1011010110110000 110100001010 

二,字符集 

1, 常用字符集分类 
ASCII及其扩展字符集 
作用:表语英语及西欧语言。 
位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。 
范围:ASCII从00到7F,扩展从00到FF。 
ISO-8859-1字符集 
作用:扩展ASCII,表示西欧、希腊语等。 
位数:8位, 
范围:从00到FF,兼容ASCII字符集。 
GB2312字符集 
作用:国家简体中文字符集,兼容ASCII。 
位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。 
范围:高字节从A1到F7, 低字节从A1到FE。 将高字节和低字节分别加上0XA0即可得到编码。 
BIG5字符集 
作用:统一繁体字编码。 
位数:使用2个字节表示,表示13053个汉字。 
范围:高字节从A1到F9,低字节从40到7E,A1到FE。 
GBK字符集 
作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312。 
位数:使用2个字节表示,可表示21886个字符。 
范围:高字节从81到FE,低字节从40到FE。 
GB18030字符集 
作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。 
位数:它采用变字节表示(1 ASCII,2,4字节)。 可表示27484个文字。 
范围:1字节从00到7F; 2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39。 
UCS字符集 
作用:国际标准ISO 10646 定义了通用字符集(Universal Character Set)。 它是与UNICODE同类的组织,UCS-2和UNICODE兼容。 
位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节。 
范围:目前,UCS-4只是在UCS-2前面加了0×0000。 
UNICODE字符集 
作用:为世界650种语言进行统一编码,兼容ISO-8859-1。 
位数:UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32。 

2 ,按所表示的文字分类 
语言 字符集 正式名称 
英语、西欧语 ASCII,ISO-8859-1 MBCS 多字节 
简体中文 GB2312 MBCS 多字节 
繁体中文 BIG5 MBCS 多字节 
简繁中文 GBK MBCS 多字节 
中文、日文及朝鲜语 GB18030 MBCS 多字节 
各国语言 UNICODE,UCS DBCS 宽字节 

三,编码 

UTF-8:采用变长字节(1 ASCII, 2 希腊字母, 3 汉字, 4 平面符号) 表示,网络传输, 即使错了一个字节,不影响其他字节,而双字节只要一个错了,其他也错了,具体如下: 
如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。 UTF-8最多可用到6个字节。 

UTF- 16:采用2字节,Unicode中不同部分的字符都同样基于现有的标准。 这是为了便于转换。 从0×0000到0×007F是ASCII字符,从0×0080到0×00FF是ISO-8859-1对ASCII的扩展。 希腊字母表使用从0×0370到0×03FF 的代码,斯拉夫语使用从0×0400到0×04FF的代码,美国使用从0×0530到0×058F的代码,希伯来语使用从0×0590到0×05FF的代码。 中国、日本和韩国的象形文字(总称为CJK)占用了从0×3000到0×9FFF的代码;由于0×00在c语言及操作系统文件名等中有特殊意义,故很多情况下需要UTF-8编码保存文本,去掉这个0×00。 举例如下: 
UTF-16: 0×0080 = 0000 0000 1000 0000 
UTF-8: 0xC280 = 1100 0010 1000 0000 
UTF-32:采用4字节。 
优缺点 
UTF-8、UTF-16和UTF-32都可以表示有效编码空间(U+000000-U+10FFFF) 内的所有Unicode字符。 
使用UTF-8编码时ASCII字符只占1个字节,存储效率比较高,适用于拉丁字符较多的场合以节省空间。 
对于大多数非拉丁字符(如中文和日文)来说,UTF-16所需存储空间最小,每个字符只占2个字节。 
Windows NT内核是Unicode(UTF-16),采用UTF-16编码在调用系统API时无需转换,处理速度也比较快。 
采用UTF-16和UTF-32会有Big Endian和Little Endian之分,而UTF-8则没有字节顺序问题,所以UTF-8适合传输和通信。 
UTF-32采用4字节编码,一方面处理速度比较快,但另一方面也浪费了大量空间,影响传输速度,因而很少使用。 

四,如何判断字符集 

1,字节序 
首先说一下字节序对编码的影响,字节序分为Big Endian字节序和Little Endian字节序。 不同的处理器可能不一样。 所以,传输时需要告诉处理器当时的编码字节序。 对于前者而言,高位字节存在低地址,低字节存于高地址;后者相反。 例如,0X03AB, 
Big Endian字节序 
0000: 0 3 
0001: AB 
Little Endian字节序是 
0000: AB 
0001: 0 3 

2,编码识别 
UNICODE,根据前几个字节可以判断UNICODE字符集的各种编码,叫做Byte Order Mask方法BOM: 
UTF-8: EFBBBF (符合UTF-8格式,请看上面。但没有含义在UCS即UNICODE中) 
UTF-16 Big Endian:FEFF (没有含义在UCS-2中) 
UTF-16 Little Endian:FFFE (没有含义在UCS-2中) 
UTF-32 Big Endian:0000FEFF (没有含义在UCS-4中) 
UTF-32 Little Endian:FFFE0000 (没有含义在UCS-4中) 

GB2312:高字节和低字节的第1位都是1。 

BIG5,GBK&GB18030:高字节的第1位为1。 操作系统有默认的编码,常为GBK,可以下载别的并升级。 通过判断高字节的第1位从而知道是ASCII或者汉字编码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Forge,WildFly Swarm和Arquillian开发微服务

在本文中,我们将看到如何使用WildFly Swarm和Forge开发微服务,以及如何使用Arquillian和Rest Assured对其进行测试。 WildFly Swarm提供了一种创新的方法来打包和运行Java EE应用程序,方法是将它们与足够的服务器运行时一起打包以“ java -j…

html页面加载时触发的方法,在页面加载时触发onchange html事件

好的,我在select字段上有一个onchange事件。它现在很棒。当下拉“网络”更改时,它会刷新第二个下拉列表。我还希望顶部的ajax代码在页面加载和onchange上触发,以便填充第二个列表。这是因为它在编辑页面上。这是使用第一个的ajax调用function…

PYTHON-进阶-编码处理小结

开始 用python处理中文时,读取文件或消息,http参数等等 一运行,发现乱码(字符串处理,读写文件,print) 然后,大多数人的做法是,调用encode/decode进行调试,并没有明确思考为何出现乱码…

华为鸿蒙话题作文800字,关于鸿蒙OS 华为最高层发布最新通知:统一口径-华为,智能手机,鸿蒙...

6月2日晚,华为正式推出了HarmonyOS(鸿蒙操作系统),引发了国内外空前关注。OS操作系统是中国手机甚至整个科技行业的弱点,因此鸿蒙OS带来的震撼及争议都很多,甚至华为内部员工对它的认知也不相同。为此华为总裁办昨天发布了题为《关…

8-4 Fabled Rooks uva11134

题意:你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内 给出该矩形左上角坐标和右下角坐标四个点 必须满足放车的位置在矩形内 边上也行 如果无解输出IMPSSIBLE 行与列是独立的 所以可以分割成两个一模一…

谷歌guava_Google Guava MultiMaps

谷歌guava番石榴 这是我尝试解释和探索Google很棒的Guava java库的系列文章中的第一篇。 我在搜索Apache Commons Collections的通用版本时遇到了番石榴(Guava)–我需要一个Bimap并且厌倦了必须使用强制类型转换来填充我的代码–但是我发现要好得多。 …

python 获取系统相关编码的函数

怎么避免UnicodeEncodeError: ‘ascii’ codec can’t…类似的错误? 1、首先在py文件头部指定文件内容编码,例如:# coding: utf8 2、文件保存的时候要和py文件头部编码一致 3、在用decode和encode的时候,一定要确认要转换的字符原…

百度的html代码是什么,百度网页源代码是什么?

2017-07-28Java抓取网页的内容代码是什么public static String getHtmlReadLine(String httpurl){String CurrentLine”";String TotalString”";InputStream urlStream;String content”";try {URL url new URL(httpurl);// URL url new URL(“http://www。 …

html中高与行高的区别,深入了解css的行高Line Height属性

什么是行间距?古时候我们是用印刷机来处理文字,印出来的每个字都位于独立的一个块里。行间距,即传说中控制两行文字之间垂直距离的东东。在CSS,line-height被用来控制行与行之间的垂直距离。不过行间距与半行间距还是取决于CSS中的…

自动生成优化的Java类专业知识

如果您今年访问过JavaOne,您可能已经参加了我的演讲“如何从数据库生成定制的Java 8代码”。 在那次演讲中,我展示了如何使用Speedment Open Source工具包使用数据库作为域模型来生成各种Java代码。 我们没有时间要考虑的一件事是,Speedment不…

vue动态路由配置,vue路由传参

如果是不同的组件过来的,可以设置不同的id值,只要在目标组件获取属性id的值就可以了,参数就利用query.属性值来获取 转载于:https://www.cnblogs.com/xiaoqi2018/p/10434318.html

Linux Netcat 命令——网络工具中的瑞士军刀

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。 netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后…

win10怎么放计算机在桌面,win10我的电脑怎么放在桌面

win10我的电脑图标怎么放在桌面呢?一不小心将win10桌面上的此电脑图标删除了,找了半天都没找到它。win10系统怎么将我的电脑图标藏的隐蔽。今天,我就将找回win10我的电脑图标方法分享给你们刚重装完win10系统有些小伙伴就急急忙忙的来询问小编…

project 2013 显示标题

1、分析 右键只能插入任务,不能插入标题,而插入任务会被编号,目前只能在打印设置标题,不能在编辑界面显示标题的,或者使用最高级任务的方式 2、解决 文件,打印,页面设置,页眉&#x…

getopt在Python中的使用

在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支…

大数据的数据采集数据处理_让我们处理大数据

大数据的数据采集数据处理作为开发人员,我们的重点是简单,有效的解决方案,因此,最有价值的原则之一就是“保持简单和愚蠢”。 但是使用Hadoop map-reduce很难坚持这一点。 如果我们要评估多个Map Reduce作业中的数据,我…

怎样正确使用和维护微型计算机,下篇:微型计算机应该怎样进行维护与保养

2. 养成良好的使用维护习惯(1)正确的使用习惯个人使用习惯对计算机的影响很大,首先是要正常开关机,开机的顺序是,先打开外设的电源,然后再开主机电源。关机顺序相反,先关闭主机电源,再关闭外设电源。其道理…

CF :K 一个含n条边的带权无向连通图,q次查询,每次查询两点间的最短距离。...

题意:给你一个含n条边的带权无向连通图,q次查询,每次查询两点间的最短距离。 思路:LCA思维。 设a,b两点间的距离为f(a,b) 则f(a,b)dis[a]dis[b]-2*dis[lca(a,b)]; 由于n条边,因此我们先任取一条边&#xff…

每天一个linux命令(20):find命令之exec

find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了。 exec解释: -exec 参数后面跟的是command命令,它的终止是以;为结束标志的&#x…

英语作业介绍一项发明计算机,介绍电脑的发明的英语作文

匿名用户1级2008-07-25 回答Simple 1:Different eras of political history are frequently identified with royal dynasties, or great wars and revolutions.Eras in the history of art and architecture may be distinguished by styles such as Renaissance, Gothic, Imp…