详解Unicode字符集以及字符编码实现(一)

news2025/2/25 17:54:15

在日常生活中,我们经常会碰到打开一个文件,但是文件内容乱码的问题,比如我想看《西游记》这部小说。

下载链接:https://m.ijjjxs.com/txt/dl-35-12585.html

点击TXT电子书下载,很快就会下载完成,但是使用电脑自带的TXT工具打开发现乱码,这个时候你是不是有种被骗的感觉?

文件内容乱码

其实网站并没有骗你,只是没有弄清楚字符编码的问题,那么什么是字符编码,如何尽量避免这种情况出现,接下来本文将详细讨论所有的细节,并使用代码实现Unicode字符集在计算机中的显示。

内容乱码的问题你可以选择带有多个字符编码的编辑器打开,具体到《西游记》这部小说中,

当我选择CLion打开文件之后,提示我"The file was loaded in a wrong encoding: 'UTF-8'",

加载或转换

当更换它的编码格式为GB2312时,文件内容能够正常显示,什么是GB2312,这中间计算机做了什么?

(一)计算机基础知识

二进制

1854年,英国数学家乔治·布尔发表了一篇里程碑式的论文,其中详细介绍了一种代数化的逻辑系统,后人称之为布尔代数。他提出的逻辑演算在后来的电子电路设计中起基础性作用。

1937年,克劳德·香农在麻省理工大学完成了其电气工程硕士学位论文《继电器与开关电路的符号分析》,用继电器和开关实现了布尔代数和二进制算术运算,其中香农的理论奠定了数字电路的理论基础。

二进制中每个数字称为一个比特(Bit,Binary digit 的缩写)。

加法:0+0=0,0+1=1,1+0=1,1+1=10

减法:0-0=0,1-0=1,1-1=0,10-1=1

乘法:0×0=0,0×1=0,1×0=0,1×1=1

除法:0÷1=0,1÷1=1

字节

通常以8个比特作为一个字节(Byte),日常生活中的计量单位:

1 Byte = 8 Bit

1KB = 1024 Byte

1MB = 1024 KB

1GB = 1024 MB

(二)ASCII编码

维基百科:字符编码

https://zh.wikipedia.org/zh-cn/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81

令人尴尬的是当我想把维基百科关于字符编码的网址粘贴上来时,发现又出现乱码,这虽然不影响使用,但是极大地影响文章的美观性,它为什么不能显示成这样?

https://zh.wikipedia.org/zh-cn/字符编码

当我将带有中文的这个网址粘贴到浏览器上去,发现它竟然还是能访问到对应的网页,真是太让人匪夷所思?

查看“字”的字符编码

https://www.compart.com/en/unicode/U+5B57

UTF-8 Encoding: 0xE5 0xAD 0x97

神奇地发现这里的0xE5 0xAD 0x97和前面的网址%E5%AD%97是一一对应的,现在是迫切地需要知道什么是字符编码,才能解释刚刚所发生的事情。

在19世纪电报的发展彻底改变了信息的远距离传输方式之前,中国、埃及和希腊等古代文明使用鼓声、信号火或烟雾信号在遥远的点之间交换信息。

美国发明家萨缪尔·摩尔斯在1837年发明了电报,还发展出一套将字母及数字编码以便拍发的方法,称为摩斯电码

国际摩斯电码

这应该是现代计算机字符编码的雏型,使用点和线表示26个英文字母以及10个数字。

ASCIIAmerican Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。第一版标准发布于1963年,最后一次更新则是在1986年,至今为止共定义了128个字元。

控制字符的编号范围是0 - 31和127,共33个字符。

可显示字符的编号范围是32 - 126,共95个字符,其中48 - 57为0到9十个阿拉伯数字,65 - 90为26个大写英文字母,97 - 122为26个小写英文字母,其余为一些标点符号、运算符号等。

ASCII字符编码表

根据以上定义,可以将字符编码转换为二进制编码,使用Byte作为基础单位。

比如大写的字母A,它的十进制编码为65,它的二进制编码为

01000001 = 01000000 (十进制64) + 00000001 (十进制1)

如果要表示Hello这个单词,可以对应地查找字符表进行转换:

01001000 01100101 01101100 01101100 01101111

(三)Unicode编码

ASCII码非常简洁,完美地处理了美国的字符编码,但是它有个致命的缺陷,很多其它国家的字符它没有办法处理,比如日文的你好(こんにちは)。

此时很多国家各显神通。

中国发明GB/T 2312,全称《信息交换用汉字编码字符集·基本集》,标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

韩国发明KS X 1001,包含谚文2350字、汉字4888字、英文字母、数字和假名共8226字。

在GB/T 2312中每个汉字及符号的码位使用两个字节来表示,这样看上去也很简洁,只是比ASCII多一个字节的使用。

但是它存在很大的问题,比如想要输入缅甸语မင်္ဂလာပါ(你好),没有办法输入字符集中不存在的字符,它没法满足不同文化之间的交流。

就在此时Unicode横空出世,Unicode全称为Unicode标准(The Unicode Standard),其整理、编码了世界上大部分的文字系统,使得电脑能以通用划一的字符集来处理和显示文字,不但减轻在不同编码系统间切换和转换的困扰,更提供了一种跨平台的乱码问题解决方案。

Unicode广泛应用于电脑软件的国际化与本地化过程。

Unicode编码非常暴力, 在它的标准中

http://www.unicode.org/versions/Unicode8.0.0/appC.pdf

它定义了UCS-4 stands for “Universal Character Set coded in 4 octets.”去表示每个字符,也就是说它最大可以表示2^32次方 = 4294967296个字符。

Unicode字符集示例

可以看到“人”使用U+4EBA这个十六进制数表示,“雨伞”使用U+2602表示,用U+的方式表示所有它能够表示的字符。

到这里好像事情进入大结局,有个统一字符集,如果都采用它那就不会出现乱码问题呀?其实以上并没有讲述计算机是怎么表示它们的。接下来就会带你看到UTF8/UTF16/UTF32闪亮登台,一个驱魔乱舞的时代!

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

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

相关文章

【测试面试】自我分析+功能+接口自动化+性能测试面试题(大全),知己知彼百战百胜......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 分析自己和面试企业…

mac tcpdump学习

学习原因 工作上遇到了重启wifi后无法发出mDNS packet的情况,琢磨一下用tcpdump用的命令如下 sudo tcpdump -n -k -s 0 -i en0 -w VENDOR-DUT-INTERFACE.pcapng是在测airplay BCT认证时,官方文档的解决方法。对tcpdump很不了解,现汇总如下的学…

JS中数组如何去重(ES6新增的Set集合类型)+经典two sum面试题

现在有这么一个重复数组:const arr [a,a,b,a,b,c]只推荐简单高效的方法,复杂繁琐的方法不做推荐方法一:const res [...new Set(arr)]Set类型是什么呢?Set 是ES6新增的一种新集合类型。具体知识点可以看下面附录:根据…

ES6中Set类型的基本使用

在ES6之前,存储数据的结构主要有两种:数组、对象。 在ES6中新增了另外两种数据结构(存放数据的方式):Set、Map,以及他们的另外形式WeakSet、WeakMap。 Set的基本使用 Set是一个新增的数据结构&#xff0c…

广东望京卡牌科技有限公司,2023年团建活动圆满举行

玉兔初临,春天相随,抖擞精神,好运连连。春天是一个万物复苏的季节,来自广东的望京卡牌科技有限公司,也迎来了新年第一次团建活动。在“乘风破浪、追逐梦想”的口号声中,2023望京卡牌目标启动会团结活动正式…

Day896.MySql的kill命令 -MySQL实战

MySql的kill命令 Hi,我是阿昌,今天学习记录的是关于MySql的kill命令的内容。 在 MySQL 中有两个 kill 命令: 一个是 kill query 线程 id,表示终止这个线程中正在执行的语句;一个是 kill connection 线程 id&#…

【数据宝应用场景】多场景,多接口,哪些数据可以用在文旅平台上?

随着云计算、物联网、互联网和移动智能终端等技术的飞速发展以及迎合游客不断升级的文旅消费需求,智慧旅游成为文旅行业信息建设的主要方向。 在信息化时代,游客对于文旅体验和文旅信息服务的要求在逐步提高。以现代科技为主要手段的智慧文旅&#xff0…

linux rsync服务端安装和windows客户端备份

安装:yum install -y rsync 密码内容:zhangsan:123456 配置文件:/etc/rsyncd.conf内容 # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: uid root gi…

从0开始的ios自动化测试

最近由于工作内容调整,需要开始弄ios自动化了。网上信息有点杂乱,这边我就按我的实际情况,顺便记录下来,看是否能帮到有需要的人。 环境准备 安装tidevice pip3 install -U “tidevice[openssl]” 它的作用是,帮你绕…

JavaScript从零开始 学习记录(一)

前言 选择视频课程之前,不仅查阅了资料,还询问了网友,最终敲定了学习黑马前端的视频教程,学了5小节,发现挺对自己口味的且从反响来看,还是相当不错的,便打算利用这个寒假学完 笔记范围 从这节…

领航智能汽车信息安全新征程 | 云驰未来乔迁新址

2月20日,在北京朝阳百子湾东朝时代创意园,云驰未来迎来乔迁之喜,智能汽车和自动驾驶领域的行业领导、合作伙伴与客户、投资人及媒体嘉宾齐聚现场,共同见证云驰未来迈上新的发展征程。 作为中国智能网联汽车和自动驾驶信息安全行业…

图床(Typora + uPic/PicGo +七牛云)

图床(Typora uPic/PicGo 七牛云) 笔者平时使用 Typora 编写 markdown 文档,文档中常常会放置图片,如果文档不需要分享的话,其实讲图片存放在本地就可以了。由于我有在多台机器编写 markdown 笔记,还有将…

维度建模基本流程总结

一、维度建模基本流程图数据RD进行业务调研和数据现状调研,产出符合相关模版规范的业务知识文档和数据现状文档。数据PM也会调研相关业务产出需求设计文档,三方参与需求评审,评审通过后基建数据RD进行需求拆解,产出技术方案&#…

redhawk:GSC file与STA file

1.GSC file redhawk做lowpower分析时需要GSC&#xff08;Global Switching Configuration&#xff09;file指导block/instance/power domain的开关状态。 Syntax&#xff08;in GSR file&#xff09;: GSC_FILES <gsc_FilePathName> Syntax&#xff08;in GSC file&a…

django项目实战八(django+bootstrap实现增删改查)进阶验证码

目录 一、安装第三方 1、pillow 2、第三方字体文件 二、实现生成验证码 1、创建code.py 2、url 3、修改auth.py 4、修改account.py 5、修改login.html 三、验证码校验 1、验证码写入到session 2、修改form下的LoginForm类新增code字段 3、修改login.html 4、修改acco…

Jasperreort使用

准备工作 下载Jaspersoft Studio 下载地址 下载后一直下一步安装 Studio基本使用 新建项目 新建模板 具体制作教程可前往B站搜索视频教程 添加中文字体 如果不添加&#xff0c;后面打印出PDF的时候中文显示不出来 电脑自带的字体一般在C:\Windows\Fonts 但该目…

6——JVM调优工具详解及调优实战

Jmap、Jstack、Jinfo命令详解 Jmap 此命令可以用来查看内存信息&#xff0c;实例个数&#xff0c;以及占用内存大小 生成dump文件 把dump文件装入Jvisvalvm进行分析 Jstack Jstack加进程id查找死锁 Jstack找出占CPU最高的线程堆栈信息 top -p 进程号&#xff1a;显示进程…

文件系统概念

1.文件逻辑结构 (1)有结构文件和无结构文件 ①定长记录 ②可变长记录 (2)顺序文件 (3)索引文件 (4)索引顺序文件 (5)多级索引顺序文件 2.文件目录 (1)文件控制块 (2)目录结构 (3)索引节点 3.文件的物理结构 (1)文件块&#xff0c;磁盘块 (2)文件分配方式 ①连续分配 ②链接…

跑步戴哪种耳机好,最适合运动跑步的蓝牙耳机

经常跑步使用的耳机&#xff0c;还是要选择佩戴着舒适以及牢固的运动耳机最为合适&#xff0c;在运动当中会遇到耳机掉落或者长时间佩戴耳道感到难受的现象发生&#xff0c;那么什么蓝牙耳机是最适合运动当中佩戴呢&#xff1f;下面这些耳机分享希望能够帮助大家。 1、南卡Run…

人工智能基础部分13-LSTM网络:预测上证指数走势

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下LSTM网络&#xff0c;主要运用于解决序列问题。 一、LSTM网络简单介绍 LSTM又称为&#xff1a;长短期记忆网络&#xff0c;它是一种特殊的 RNN。LSTM网络主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题…