刨根究底字符编码
文章平均质量分 88
刨根究底字符编码
sinolover
完成项目,就要软硬兼施
展开
-
【转】理解字节序 大端字节序和小端字节序
转自:https://www.cnblogs.com/gremount/p/8830707.html以下内容参考了http://www.ruanyifeng.com/blog/2016/11/byte-order.htmlhttps://blog.csdn.net/yishengzhiai005/article/details/396725291.计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。举例来说,数值0x22.原创 2021-04-21 13:02:55 · 393 阅读 · 1 评论 -
【转】刨根究底字符编码【2.0版】(3):字符编码的由来、演变与ASCII码
为什么需要字符编码1.计算机一开始发明出来时是用来解决数字计算问题的,后来人们发现,计算机还可以做更多的事,例如文本处理。但计算机其实挺“笨”的,它只“认识”010110111000…这样由0和1两个数字组成的二进制数字,这是因为计算机的底层硬件实现就是用电路的断开和闭合两种状态来表示0和1两个数字的。因此,计算机只可以直接存储和处理二进制数字。2.为了在计算机上也能表示、存储和处理像文字、符号等等之类的字符,就必须将这些字符转换成二进制数字。当然,肯定不是我们想怎么转换就怎么转换,原创 2020-11-24 18:01:43 · 350 阅读 · 0 评论 -
【转】刨根究底字符编码【2.0版】(2):关键术语解释
上一篇中讲道,字符编码所涉及的面非常广,向下的话,涉及到计算机的底层技术,甚至是硬件实现。因此,这里就让我们从字符编码涉及到的最基本的术语讲起。大部分术语你可能都已经有了解了,但我们现在从字符编码的角度,再来看这些术语,或许你会有不同的理解。位1.位,即比特(Bit),亦称二进制位、比特位、位元,指二进制数中的一位,是计算机中信息表示的最小单位。Bit是Binary digit(二进制数位)的缩写,由数学家John Wilder Tukey提出,习惯上以小写字母b表示,如8比特可表示为8原创 2020-11-18 10:48:40 · 424 阅读 · 0 评论 -
【转】刨根究底字符编码【2.0版】(1):开篇
首先跟大家分享一个有趣的亲身经历。有一次,在网上我看到有程序员发了一个帖子,帖子题目乍一看让人感到惊愕,但细一想又让我会心一笑。这个帖子的题目大致上是这样的:字符编码是不是让程序员最感到恶心的问题?更有意思的是,这个帖子下面竟然还得到了不少程序员的认同和点赞。我也表示了认同和点了赞。为什么对字符编码会有这样的看法呢?字符编码像个幽灵字符编码,看起来是一个不太受到关注的边缘主题,似乎与前端技术的新潮酷炫、数据结构与算法的高大上、Java/Go/MySQL等的实用都挨不上边。但事实上,字原创 2020-11-18 10:48:36 · 319 阅读 · 1 评论 -
【转】刨根究底字符编码之十六——Windows记事本的诡异怪事:微软为什么跟联通有仇?
1.当用一个软件(比如Windows记事本或Notepad++)打开一个文本文件时,它要做的第一件事是确定这个文本文件究竟是使用哪种编码方式保存的,以便于该软件对其正确解码,否则将显示为乱码。一般软件确定文本文件编码方式的方法有如下三种:检测文件头标识; 提示用户手动选择; 根据一定的规则自行推断。2.文件头标识一般指的是字节顺序标记BOM(Byte Order Mark),位于文件的最开始。当打开一个文本文件时,就BOM而言,有如下几种情形:BOM为:EF BB BF ——表示编原创 2020-11-18 10:48:10 · 398 阅读 · 0 评论 -
【转】刨根究底字符编码之十五——UTF-32编码方式
1.UTF-32在UTF目前常用的三种编码方式(UTF-8、UTF-16、UTF-32)中,是最为简单的一种编码方式。UTF-32编码方式不使用任何编码算法将Unicode字符码点值(即编号字符集CCS中的字符编号)转换为码元序列,而是将每个Unicode字符码点值直接表示为一个32位的码元序列。因此,目前UTF-32是一种固定宽度(也称为等宽、等长或定长)码元序列的Unicode字符编码方式。2.UTF-32中的码元由32位组成。UTF-32使用的32位码元足够大,目前Unicode字符集原创 2020-11-18 10:47:58 · 1336 阅读 · 0 评论 -
【转】刨根究底字符编码之十四——UTF-16究竟是怎么编码的
1.首先要注意的是,代理Surrogate是专属于UTF-16编码方式的一种机制,UTF-8和UTF-32是不用代理的。如前文所述,为了让UTF-16能继续编码基本平面后面的增补平面中的码点值,于是扩展了UTF-16编码方式。具体的扩展方法就是为其增加了代理机制,用两个对应于基本平面码点(即BMP代理区中的码点)的16位码元来表示一个增补平面码点,这两个用来表示一个增补平面码点的特殊16位码元就被称为“代理对”。如果要用简单的一句话来概括,就是——所有大于0xFFFF的码点值(即增补平面码点原创 2020-11-18 10:47:51 · 361 阅读 · 0 评论 -
【转】刨根究底字符编码之十三——UTF-16编码方式
1.UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets、2-byte Universal Character Set)。而UCS-2,是早期遗留下来的历史产物。UCS-2将字符编号直接映射为字符编码(CEF,而非CES,详见前文中对现代字符编码模型的解释),亦即字符编号就是字符编码,中间没有经过特别的编码算法转换。因此,从现代字符编码模型的角度来看的话,此时并没有将编号字符集CCS与字符编码方式CEF作严格区分,既可以将UCS-2看原创 2020-11-18 10:47:47 · 802 阅读 · 1 评论 -
【转】刨根究底字符编码之十二——UTF-8究竟是怎么编码的
UTF-8究竟是怎么编码的1.UTF-8编码是Unicode字符集的一种字符编码方式(CEF),其特点是使用变长字节数(即变长码元序列或称变宽码元序列)来编码。目前一般是1到4个字节,当然,也可以更长。为什么要变长呢?这可以理解为按需分配,比如一个字节足以容纳所有的ASCII字符,那何必补一堆0,导致占用更多的字节来存储呢?实际上变长编码有其优势,也有其劣势,优势方面除了上面所讲的节省存储空间之外,还有就是自动纠错性能好、利于传输、扩展性强,而劣势方面主要是由于字符的编码字节数不固定导致不利原创 2020-11-18 10:47:42 · 464 阅读 · 0 评论 -
【转】刨根究底字符编码之十一——UTF-8编码方式与字节序标记BOM
一、UTF-8编码方式1.接下来将分别介绍Unicode字符集的三种编码方式:UTF-8、UTF-16、UTF-32。这里先介绍应用最为广泛的UTF-8。为满足基于ASCII、面向字节的字符处理的需要,Unicode标准中定义了UTF-8编码方式。UTF-8应该是目前应用最广泛的一种Unicode编码方式(但不是最早面世的,UTF-16要早于UTF-8面世)。由于UTF-16对于ASCII字符也必须使用两个字节(因为是16位码元)进行编码,存储和处理效率相对低下,并且由于ASCII字符经过U原创 2020-11-18 10:47:37 · 592 阅读 · 0 评论 -
【转】刨根究底字符编码之十——Unicode字符集的字符编码方式
一、字符编码方式CEF的选择1.由于Unicode字符集非常大(并且作为开放字符集还在不断扩展之中),有些字符的编号(即码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用两个或两个以上字节。比如,汉字“严”的Unicode编号以十六进制数表示为4E25,转换成二进制数有15位(100 1110 0010 0101),对“严”这个字符的编号进行编码的话,至少需要2个字节。表示其他更大编号的字符,可能需要3个字节或者4个字节,甚至更多。2.这带来两个问题:一是,如原创 2020-11-18 10:47:32 · 334 阅读 · 0 评论 -
【转】刨根究底字符编码之九——字符编码方案的演变与字节序
字符编码方案的演变与字节序一、字符编码方案的演变1.根据前面的介绍,对于字符编码方案的演变,我们大致上可简单地划分为三个阶段: ① ASCII编码方案阶段 → ② ANSI编码方案阶段 → ③ Unicode/UCS编码方案阶段。在第一个阶段的ASCII编码方案阶段,ASCII编码方案主要适用于美国(与美国同文的英国大致上也适用)。后来计算机发展到欧洲各国以及世界各地,开始发展到了作为第二阶段的ANSI编码方案阶段,各个国家和地区先后各自制定了既兼容ASCII但又互不兼容的A.原创 2020-11-18 10:47:21 · 281 阅读 · 0 评论 -
【转】刨根究底字符编码之八——Unicode编码方案概述
Unicode编码方案概述1.前面讲过,随着计算机发展到世界各地,于是各个国家和地区各自为政,搞出了很多既兼容ASCII但互相之间又不兼容的各种编码方案(微软统一称之为ANSI编码,具体体现为各种ANSI代码页)。这样一来,同一个二进制编码在不同的ANSI编码方案中就有可能被解释成不同的字符,从而对采用不同ANSI编码方案的系统之间的数据交换带来了极大的不便。比如大陆和台湾是只相隔150海里、使用着同一种语言的兄弟地区,也分别采用了不同的DBCS(Double Byte Charact.原创 2020-11-05 15:44:13 · 511 阅读 · 0 评论 -
【转】刨根究底字符编码之七——ANSI编码与代码页
一、ANSI编码1.如前所述,在全世界所有国家和地区的文字符号统一编码的UCS/Unicode编码方案问世之前(UCS、Unicode后文有详细介绍),各个国家、地区为了用计算机记录并显示自己的字符,都在ASCII编码方案的基础上,设计了各自的编码方案。比如欧洲先后设计了EASCII和ISO/IEC 8859系列字符编码方案;为了显示中文及相关字符,中国设计了GB系列编码(“GB”为“国标”的汉语拼音首字母缩写,即“国家标准”之意)。同样,日文、韩文以及其他世界各个国家和地区的文字都有它们各原创 2020-11-05 15:44:09 · 923 阅读 · 0 评论 -
【转】刨根究底字符编码之六——简体汉字编码中区位码、国标码、机内码、外码、字形码的区别及关系
GB2312、GBK、GB18030等GB系列汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码、外码、字形码又是什么意思?它们是如何转换的,又为什么要这样转换?下面以GB2312为例来加以说明。一、区位码1.整个GB2312字符集分成94个区,每区有94个位,每个区位上只有一个字符,即每区含有94个汉字或符号,用所在的区和位来对字符进行编码(实际上就是码点值、码点编号、字符编号),因此称为区位码(或许叫“区位号”更为恰当)。换言之,GB2312将包括汉字在内的所.原创 2020-11-05 15:44:03 · 5661 阅读 · 0 评论 -
【转】刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK
一、概述1.英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够了(2^8 = 256)。但其他一些文字不止这么多字符,比如中文中的汉字就多达10多万个,一个字节只能表示256个字符,肯定是不够的,因此只能使用多个字节来表示一个字符。于是当计算机被引入到中国后,相关部门设计了GB系列编码(“GB”为“国标”的汉语拼音首字母缩写,即“国家标准”之意)。按照GB系列编码方案,在一段文本中,如果一个字节是0~127,那么这个字节的含义与ASCII编码相同,否则,这个原创 2020-11-05 15:43:57 · 1228 阅读 · 0 评论 -
【转】刨根究底字符编码之四——EASCII及ISO 8859字符编码方案
1.计算机出现之后,首先逐渐从美国发展到了欧洲。由于欧洲很多国家所用到的字符中,除了基本的、美国也用的那128个ASCII字符之外,还有很多衍生的拉丁字母等字符。比如,在法语中,字母上方有注音符号;而欧洲其他国家也有各自特有的字符。考虑到一个字节能够表示的编码实际上有256个(2^8 = 256),而ASCII字符却只用到了一个字节中的低7位(因此在ASCII码中最高位总是为0),编号为0x00~0x7F(十进制为0~127)。也就是说,ASCII只使用了一个字节所能表示的256个编码中的前12原创 2020-11-04 18:35:56 · 397 阅读 · 0 评论 -
【转】刨根究底字符编码之三——字符编码的由来
字符编码的由来一、为什么需要对字符进行编码1.计算机一开始发明出来时是用来解决数字计算问题的,后来人们发现,计算机还可以做更多的事,例如文本处理。但计算机其实挺“笨”的,它只“认识”010110111000…这样由0和1两个数字组成的二进制数字,这是因为计算机的底层硬件实现就是用电路的断开和闭合两种状态来表示0和1两个数字的。因此,计算机只可以直接存储和处理二进制数字。2.为了在计算机上也能表示、存储和处理像文字、符号等等之类的字符,就必须将这些字符转换成二进制数字。当然,.原创 2020-11-04 18:34:25 · 239 阅读 · 0 评论 -
【转】刨根究底字符编码之二——关键术语解释(下)
关键术语解释(下)如前所述,现代字符编码模型共分为5层,下面分层进行简要介绍。一、第1层 抽象字符表ACR (Abstract Character Repertoire抽象字符清单):明确字符的范围(即确定支持哪些字符)1.抽象字符表ACR是一个编码系统支持的所有抽象字符的集合,可以简单理解为无序的字符集合,用于确定字符的范围,即要支持哪些字符。抽象字符表ACR的一个重要特点是字符的无序性,即其中的字符并没有编排数字顺序,当然也就没有数字编号。2.“抽象”字符不具有某种特定的字形原创 2020-11-04 18:22:23 · 399 阅读 · 2 评论 -
【转】刨根究底字符编码之零——前言
前言一、字符编码是计算机世界里最基础、最重要的一个主题之一。不过,在计算机教材中却往往浮光掠影般地草草带过,甚至连一本专门进行深入介绍的著作都找不到(对这一点我一直很困惑,为什么就没有哪位大牛对这个如此基础、重要而又如此容易让人困惑的主题写一本专著予以介绍呢)。而在编程实践中,如果不发扬死磕到底的精神将字符编码问题的来龙去脉、前世今生彻底搞清楚,那么它终将会像幽灵一样挥之不去,导致时不时地被各种与字符编码相关的“灵异”事件折磨得死去活来。本人正是在经受了字符编码所带来的种种令人崩溃的痛苦之后原创 2020-11-04 18:17:52 · 251 阅读 · 0 评论 -
【转】刨根究底字符编码之一——关键术语解释(上)
声明:本系列文章参考了网上的大量资料,除了少部分资料由于未作大量修改(但基本也有少量修改,因为网上文章随意性较大,如若不改反而让人迷糊)而标明了出处之外,其余由于已作了大量改写,因此没有再一一说明,在此对原作者表示歉意并感谢。另外,文中图片部分来自网络,部分为本人制作,也不再一一说明。同时,文中若有错漏,还请直接招呼板砖,不用客气。关键术语解释(上)一、位1.位,即比特(Bit),亦称二进制位、比特位、位元,指二进制数中的一位,是计算机中信息表示的最小单位。Bit是Binary digi原创 2020-11-04 18:14:56 · 656 阅读 · 1 评论