前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官:我收到的文件为啥会打开乱码?

面试官:我收到的文件为啥会打开乱码?

作者头像
小锟哥哥
发布2022-05-10 09:05:15
7550
发布2022-05-10 09:05:15
举报
文章被收录于专栏:GoLang全栈

今天是春节之后第一天上班,

锟哥在这里先祝大家,开工大吉,身体健康!

同时,锟哥也给大家准备了开工红包,在我们的公众号后台回复 开工大吉 领取红包,先到先得哦!

回归今天的主题,我们先来看一张图:

是不是非常非常的熟悉,特别是在 5-6 年之前!

你向某人发的 表白小作文.txt,他迟迟不回你信,别怀疑,TA 或许打开看到的就是这样的内容,哈哈!

今天我们就要来讨论下:

为啥当年你迟迟没收到回信,呸....

讨论下,这乱码是咋造成的!

字符编码基础知识

要破译这悬案,首先得知道些字符编码的基础知识。

因为字符编码,对于计算机技术来说,是他必不可少的基石。

为啥呢?

因为计算机他们计算、交流都使用的是 010101 这种二进制,

我们人类不可能也用二进制去和计算机交流呗,

如果那样的话,你现在看到的这篇文章应该全是 01 而不是现在的这种 文字符号

所以在文字和计算机之间就必须存在一种转换(翻译)的角色,

就像两个不同国家的人交流,

如果双方都不懂对方语言,就需要一个 翻译 来为双方翻译。

这个 翻译 在计算机里面就是 字符集

最开始计算机只收录了 128 个字符,这个字符集叫 ASCII 码

以下我截了表的部分,来自百度百科。

你可以看到,大写字母 A 对应的数字是 65 。

怎么运作的呢?

计算机里面计算、存储这些依旧使用 0101 二进制,但是当需要和人类交互的时候,就需要按照字符集翻译成属于我们的文字。

来看一句 Go 语言代码:

代码语言:javascript
复制
fmt.Printf("%c \n",65)

// 执行结果
A

这句代码就是把 65 这个十进制,根据字符集给翻译成了大写字母 A 。

更多的字符集

ASCII 码 表只收录了 128 个字符,随着互联网技术的发展,很明显是不够用的。

不同国家有自己的文字也就意味着有各自的字符集,比如我国就有GB2312,韩国有Euc-kr,

但这样一来大家都各自搞一套,不乱套了么!

于是 Unicode 就诞生了,他把全球所有的符号都给收录了进来,都给了他们一个唯一的编码。

貌似一下就天下太平了。

但是 Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

但是我们知道英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍。

这该怎么办?

Unicode 解决了翻译,但是没解决传输和存储问题!

于是 UTF-8 来了!

UTF-8 就是在互联网上,是使用最广的一种 Unicode 的 实现方式之一,敲重点,是实现方式,同时是之一

其他还有 UTF-16,UTF-32 但我们一般不用。

UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

具体咋实现变长的,规则是啥,我这里截一张阮一峰大神的文章里的描述:

图片来自:https://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

经过这两个牛逼技术的组合,你此刻才能看到屏幕上的文字!

因为我们数据在传输的时候,并不是使用的文字符号,而是被翻译成了 UTF-8 码的方式进行传输的。

那为啥会出现乱码呢?

当 UTF-8 并没大一统的时候,各家的字符集都不一样。

你文档里面的内容使用的是 GB2312 编码 ,但你使用 ASCII编码 去翻译,那肯定就乱码了哇。

不过现在一般还是不太容易出现了,因为各大厂家,各大开发者,都基本默认使用 UTF-8 了。

所以乱码出现的概率就比较小了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符编码基础知识
    • 为啥呢?
      • 怎么运作的呢?
      • 更多的字符集
        • 这该怎么办?
        • 那为啥会出现乱码呢?
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档