戏说编码发展史
让我们在草堆上坐下,点上一支烟,仰望星空,开始讲述一段关于编码的奇妙故事。这是一个充满智慧与创意的旅程,让我们一起走进计算机编码的世界,它的历史与发展。
很久以前,一群聪明的家伙开始用8个可以开合的晶体管来组合出不同的状态,表示世界上的万物。他们把这称为"字节",就像天空中的一颗颗星星,闪耀着独特的光芒。
接着,他们制造了一些能够处理这些字节的机器,机器启动后,字节可以组合出无数种状态,不断变化。他们看到这一切,觉得非常神奇,于是称之为"计算机"。
计算机最初只在美国使用。八位的字节可以组合出256种不同的状态。他们其中的一部分状态被规定为特殊用途,比如控制码。当终端、打印机遇到这些约定的字节时,它们会执行一些特定的动作。比如遇到某个特定的字节,终端会换行,打印机则会以特殊方式显示文字。大家看到这一切,觉得非常棒,于是将这种编码方案称为ANSI的"Ascii"编码。当时,世界上所有的计算机都采用这种编码来保存英文文字。
随着计算机在全球范围内的普及,世界各地的人们开始使用计算机。许多国家的文字中有很多是Ascii编码里没有的字符。为了在计算机上保存这些文字,他们开始使用127号之后的空位来表示新的字母、符号等。这些字符集被称为"扩展字符集"。
当中国人接触到计算机时,他们面临一个难题:如何用有限的字节状态来表示成千上万的汉字。智慧的中国人民并没有退缩,他们重新安排了编码方案,规定小于127的字符保持原意,而两个大于127的字节连在一起时,就可以表示一个汉字。这样的方案被称为"GB2312"。在这个编码方案中,不仅包括了汉字,还有数学符号、罗马希腊字母、日文的假名等。后来为了支持更多的汉字和符号,GBK标准应运而生。再后来为了满足少数民族的计算机使用需求,GBK进一步扩展为GB18030。这一系列的标准让中华民族的文化得以在计算机时代中传承。
中国的程序员们看到这一系列汉字编码的标准非常好,于是将它们称为"DBCS"(双字节字符集)。在这个标准里最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案中。程序员们在编写支持中文处理的程序时,需要特别注意字符串中的每个字节值。如果一个字节的值大于127,那么就认为一个双字节字符集里的字符出现了。那时候的计算机僧侣们都会牢记这个咒语:“一个汉字算两个英文字符!”仿佛是一种神秘的仪式,确保了文化的传承与计算机技术的融合。
听完这个故事后是不是觉得编码的世界充满了神奇与趣味?让我们一起继续这个充满无限可能的数字世界吧!在计算机世界中的文字编码之旅中,各国曾各自为政,推出了自己的编码标准。这导致了一个尴尬的局面:不同的国家和地区,甚至相隔不远的兄弟地区如大陆和台湾,所使用的编码方案互不兼容。若想在电脑中显示汉字,就必须安装专门的汉字系统来处理。这无疑增加了复杂性和成本,阻碍了技术的普及。这就像是一场没有硝烟的“巴比伦塔难题”,让电脑世界的交流变得困难重重。
正当人们为这个问题苦恼时,国际标准化组织ISO如同天使加百列一般及时出现。他们决定解决这个问题,打破地域界限,创建一个全球统一的编码方案——UNICODE。这是一种“Universal Multiple-Octet Coded Character Set”,即UCS,俗称的“UNICODE”,旨在涵盖地球上所有文化、所有字母和符号的编码。
随着计算机存储技术的飞速发展,空间不再是问题,ISO决定用两个字节来表示所有字符。对于ASCII中的半角字符,UNICODE保持其原始编码不变,而对其他文化和语言的字符则进行全面重新编码。这一方案不仅解决了空间问题,更为全球文字编码带来了统一的可能性。这使得那些曾经的多种字符集存在时的多语言软件公司迎来了新的机遇。他们不再需要在不同的国家和地区为软件加装不同的字符集,只需使用UNICODE即可显示全球所有文化的字符。
UNICODE的制定并没有与任何现有的编码方案兼容,这使得GBK与UNICODE在汉字的内码编排上截然不同。没有一种简单的算法可以直接转换这两种编码,必须通过查表来进行。为了适应计算机网络的兴起,ISO还推出了UTF(UCS Transfer Format)标准。UTF8、UTF16等标准都是为了更好地在网络中传输UNICODE编码的数据。在网络传输中,为了确保数据的准确性,计算机僧侣们对网络中的高低位解读方式极为重视。他们知道在文本流的开始处发送特定的标志符可以确认后续文本的高低位解读方式。无论是使用“FEFF”还是“FFFE”,都代表着全球文字编码统一的坚定步伐。
如今,随着UNICODE和UTF标准的普及,全球的文字编码问题正在逐步得到解决。无论是汉字、英文字母还是其他任何文化的字符,都可以在计算机世界中畅通无阻地展示和传输。这是一个全球性的努力,是技术发展的必然结果,也是我们迈向更加开放、包容的世界的重要一步。深探Windows记事本中的神秘现象:文字消失之谜
当我们谈及Windows操作系统中的记事本应用,有一个奇特的现象引人关注。当你在记事本中新建一个文件,输入“联通”两字后保存并关闭,再重新打开时,你会发现这两个汉字不翼而飞,取而代之的是乱码。这一奇怪现象背后隐藏着什么秘密呢?有人甚至将其与联通公司的竞争力相联系,认为这正是联通在某些方面拼不过移动的原因。事实并非如此简单。
这一奇怪现象背后的真正原因是编码冲突。这涉及到GB2312编码和UTF-8编码之间的差异。让我们先了解一下这两种编码的转换规则。
在Unicode中,UTF-8是一种广泛使用的编码方式。不同的字符范围有不同的编码方式。例如,“汉”字的Unicode编码是6C49。这个编码在0800-FFFF之间,因此需要使用3字节的模板进行编码。类似地,其他字符也可以根据相应的模板进行UTF-8编码。
当你新建一个文本文件时,记事本的默认编码方式是ANSI,实际上采用的是GB系列的编码方式。在这种编码下,“联通”的内码是特定的字节组合。当这个文件被误认为是UTF-8编码的文件时,就会出现问题。
具体来说,UTF-8解码时,会根据特定的字节组合来识别字符。如果文件的开头字节组合恰好符合UTF-8的两字节模板(即以110和10开头),记事本就会误认为这是一个UTF-8编码的文件。但实际上,文件的内容可能并不符合这种编码方式,导致字符无法正常显示,从而出现乱码。
这就是“联通”两个字在记事本中消失的原因。如果你在其他位置多输入一些字符,这些字符的编码不太可能恰好以110和10开头,因此记事本会正确地将其解读为ANSI编码,乱码问题就不复存在了。
还有一个关于数据库中的N前缀字符串类型的知识点。在这种数据类型中,无论字符是汉字、英文字母还是其他字符,都固定用两个字节来表示一个字符。这意味着,在测试字符串长度时,有n前缀的数据类型会将一个汉字视为一个字符,而不是两个字符。
这个神秘现象虽然引人好奇,但背后却有着深刻的编码原理。了解这些编码知识,不仅可以帮助我们理解这一奇怪现象,还能让我们更加深入地了解计算机如何处理不同的字符和文本文件。
平面设计师
- 戏说编码发展史
- jqueryUI tab标签页代码分享
- webpack4 处理CSS的方法示例
- 基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数
- vue仿element实现分页器效果
- 在Mac OS下使用Node.js的简单教程
- 6种php上传图片重命名的方法实例
- PHP设计模式之工厂模式实例总结
- 深入分析MSSQL数据库中事务隔离级别和锁机制
- 微信小程序实战之自定义抽屉菜单(7)
- php上传图片之时间戳命名(保存路径)
- jquery实现二级导航下拉菜单效果
- 微信小程序实现元素渐入渐出动画效果封装方法
- 全面解析Bootstrap弹窗的实现方法
- PHP实现微信支付(jsapi支付)流程步骤详解
- python 正则表达式语法学习笔记