上面这种乱码的形式我特别映像深刻,刚好今天在学习的时候碰到了,便记录下来。

先理解电脑中是怎么保存数据的。

电脑中的数据

我们知道,电脑所保存的数据,都是010101 的二进制数据。常常在学数据结构的时候,都知道程序 = 算法 + 数据结构。而数据结构就是相当于我们这里的二进制了。

计算机怎么识别字符串?

我们都知道,计算机只能识别二进制数,在它面前都是0和1 两个数字,那怎么让不同的 0 和 1 组成来表示不同的数据呢?

这里典型的我们都知道 ASCII 码,这里的 ASCII 码就好比一个字典,用 8 位二进制,来存储着 128 个不同的数,对应着 128 个不同的字符。比如小写字母 a 在 ASCII 里面,就是第 97 个,也就是二进制 0110 0001。那么这里,我们的计算机就能识别了。

字符集

表示的可以是字符的一个集合。像“中文”就是一个字符集,比如“第一版《新华字典》里面出现的所有汉字”,这是一个字符集。这样,我们才能明确知道,一个字符在不在这个集合里面。比如,我们日常说的 Unicode,其实就是一个字符集,包含了 150 种语言的 14 万个不同的字符。

字符编码

则是对于字符集里的这些字符,怎么一一用二进制表示出来的一个字典。上面说的 Unicode,就可以用 UTF-8、UTF-16,乃至 UTF-32 来进行编码,存储成二进制。所以,有了 Unicode,其实我们可以用不止 UTF-8 一种编码形式。

锟斤拷烫烫烫的由来

同样的文本,采用不同的编码存储下来。如果另外一个程序,用一种不同的编码方式来进行解码和展示,就会出现乱码。这就好像两个军队用密语通信,如果用错了密码本,那看到的消息就会不知所云。在中文世界里,最典型的就是“手持两把锟斤拷,口中疾呼烫烫烫”的典故。

首先,“锟斤拷”的来源是这样的。如果我们想要用 Unicode 编码记录一些文本,特别是一些遗留的老字符集内的文本,但是这些字符在 Unicode 中可能并不存在。于是,Unicode 会统一把这些字符记录为 U+FFFD 这个编码。如果用 UTF-8 的编码 的格式存储下来,就是\xef\xbf\xbd。如果连续两个这样的字符放在一起,\xef\xbf\xbd\xef\xbf\xbd,这个时候,如果程序把这个字符,用 GB2312 的方式进行 解码,就会变成“锟斤拷”。这就好比我们用 GB2312 这本密码本,去解密别人用 UTF-8 加密的信息,自然没办法读出有用的信息。

而“烫烫烫”,则是因为如果你用了 Visual Studio 的调试器,默认使用 MBCS 字符集。“烫”在里面是由 0xCCCC 来表示的,而 0xCC 又恰好是未初始化的内存的赋值。于是,在读到没有赋值的内存地址或者变量的时候,电脑就开始大叫“烫烫烫”了。

声明:该文章是学习笔记和学习心得。以上的部分图片来源于极客时间的”深入浅出计算机组成原理“的课程

手持两把锟斤拷,口中疾呼烫烫烫相关推荐

  1. 11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?

    11 | 二进制编码:"手持两把锟斤拷,口中疾呼烫烫烫"? 上算法和数据结构课的时候,老师们都会和你说,程序 = 算法 + 数据结构.如果对应到组成原理或者说硬件层面,算法就是我们 ...

  2. 组成原理|手持两把锟斤拷,口中疾呼烫烫烫

    乱码的形成:编码<->解码 手持两把锟斤拷,口中疾呼烫烫烫 脚踏千朵屯屯屯,笑看万物锘锘锘 乱码? 乱码是怎么出现的呢?是CPU太热了?口中疾呼烫烫烫?2333 原因是:同样的文本,采用不 ...

  3. 手持两把锟斤拷,口中疾呼烫烫烫。 脚踏千朵屯屯屯,笑看万物锘锘锘。

    锟斤拷 Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACT ...

  4. 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘

    锟斤拷 Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACT ...

  5. 手持两把锟斤拷, 口中疾呼烫烫烫, 脚踏千朵屯屯屯, 笑看万物锘锘锘

    锟斤拷的来历 GBK与UTF-8 Unicode和老编码体系的转化进程中,一定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLAC ...

  6. 手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。

    233333 TA 学编程时爱看的书籍封面是? 各种各样的动物 21 天精通 XXX 現役女子大生(秘)リアルセックス 03 转载于:https://www.cnblogs.com/guangshan ...

  7. 1 分钟带你认识从 � 到 锟斤拷

    作者 | 石头哥 来源 | 程序猿石头(ID:tangleithu) 以一首五言绝句作为开篇,你知道背后说的是什么吗? 手持两把锟斤拷 口中疾呼烫烫烫 脚踏千朵屯屯屯 笑看万物锘锘锘 � 为何物? 在 ...

  8. 烫烫烫、屯屯屯、锟斤拷、诺诺诺的简单示例代码

    手持两把锟斤拷, 口中疾呼烫烫烫. 脚踏千朵屯屯屯, 笑看万物锘锘锘. 烫烫烫 简单点说,最常见的就是 数组没初始化 并且按照%s 输出了. #include<stdio.h> int m ...

  9. 【考据】“烫烫烫”与“锟斤拷”的原理

    在程序员网站上经常看到一个段子(满满的都是泪啊) 手持两把锟斤拷,口中疾呼烫烫烫. 解释一下为什么会是这两个东西不是别的= =: 棍斤拷乱码: 源于GBK字符集和Unicode字符集之间的转换问题.U ...

最新文章

  1. 2019年值得关注的九个AI创业风口
  2. 低压抽屉柜常见故障处理方法_电磁流量计的常见故障及处理方法
  3. Spring Security 入门(四):自定义-Filter
  4. lombok @EqualsAndHashCode 注解的影响
  5. SQL case when then 的用法
  6. C语言寻找错误是哪个快捷键,求大佬改正寻找一下错误,
  7. (十)java springboot b2b2c shop 多用户商城系统源码:服务网关zuul初级篇
  8. 在杭州,吃过这60样东西,人生才算完美!
  9. P6257-[ICPC2019 WF]First of Her Name【AC自动机】
  10. 我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?|附视频讲解
  11. Intellij IDEA中如何给main方法赋args
  12. 商业智能让营销更精确
  13. 新品上市|A股场内衍生品大盘点
  14. miui12系统小米系统安卓系统里面存储空间占用太多如何清理
  15. python批量修改替换文件内容
  16. 制作apt-get本地源解决无网络情况下安装软件
  17. 移动端开发网页时,有部分字体无故变大或变小
  18. 谷歌125亿美元收购摩托罗拉
  19. arcgis android gif,一种基于动态地图符号的移动GIS可视化方法与流程
  20. vue的分支及循环结构

热门文章

  1. LTE学习笔记--LTE无线连接过程--UE Attach过程和Detach过程
  2. 一个完整的搜索系统 - God bless you - 博客园
  3. Linux文件系统--文件类型
  4. 爱马仕Hermès手表怎么样?
  5. php 图片透明,PHP_功能强大的PHP图片处理类(水印、透明度、旋转),非常强大的php图片处理类,可 - phpStudy...
  6. 将标签转为onehot编码
  7. Libevent之信号事件管理
  8. 如何从Adobe Illustrator文件中提取PNG
  9. sql查询每科成绩的最高分_编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数...
  10. 小班计算机游戏教案,小班游戏教案10篇