为什么想法输出会乱码

介绍

这篇文章主要介绍”为什么想法输出会乱码”,在日常操作中,相信很多人在为什么想法输出会乱码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“为什么想法输出会乱码”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<强>,前言

乱码这个东西相信大家都遇到过,今天我的女朋友三歪就火急火燎的上来找我:“亲爱的,我的想法怎么输出乱码了吗?"

我一顿操作就给他搞好了,但是三歪不愧是我的女朋友,好奇心跟我是一样样的,随我。

为什么想法输出会乱码

那为什么会出现乱码呢?

什么是编码,什么是解码?

什么是字符码,什么是字符集吗?

为什么要有Unicode ? utf - 8和GBK又有什么不同呢?

三歪坐在我的腿上对我撒娇似的说出这一连串的问题,我这个人宠粉但是更宠女朋友,所以就有了这篇文章。

为什么会出现乱码我们知道计算机里存储的只会是0和1,组成的字节流,而仅是数字满足不了我们的需求,我们还需要文本的处理等等,但是计算机只认识数字,所以我们需要告诉计算机什么数字代表什么字符。

比如我指定0000代表,0001代表B这样计算机就知道了,所以我要把AB这两个字符存入计算机的话,实际存储的就是0000年,0001年,其实就等于把每个字符定制一个唯一的编码。

但是这是我的指定,不同的人想法是不同的,比如小明就喜欢1000表示,1111表示B,那小明的计算机按照他指定的编码方式存储,就是1000年,1111年,之后传输给我的计算机,我拿1000年到1111年,按照我的编码解出来可能就是%,了,这就乱码了。

所以乱码的本质就是编码和解码实现没对应上。

有些同学可能对编码和解码的概念不太熟悉,我来解释一下:

<李>

编码:其实就是将字符按照一定的格式转换成字节流的过程。

<李>

解码:就是将字节流解析成字符。

可以看到随意编码的就会产生各自的计算机都无法正确解析的情况,所以需要有一个标准,大家都按那个标准来指定字符和数字的对应关系。

<强>标准字符编码

美国国家标准协会ANSI就制定了一个标准,即美国信息交换标准代码(ASCII),规定了常用字符集的集合和对应的数字编号,例如65表示,a .

为什么想法输出会乱码

ASCII实际上是7位编码,用二进制代码表示就是0000000 ~ 0000000,不过1个字节是8位,所以一般都用8位来存储。可以看到,ASCII代表了128个字符,这其实是倾美国的编码,你看同样讲英文的英国,ASCII上都没英镑的标记。

还有人家的韩文,日文等等,更别说咱们中文了。

1个字节最多只能表示256个字符,所以对我们来说不够用,因此需要扩展,像GB2312,就是我们国家标准总局发布的《信息交换用汉字编码字符集》,后来又发布了GBK,这个K就是扩展的意思,在GB2312,的基础上又添加了很多比如繁体字等字符。

所以说等于每个国家都有自己的标准,因为语言都是不同的,各字符集的不同就导致计算机之间文档的交流非常困难,因此大家又开始了一波标准化。

像美国的ANSI组织制定了ANSI标准字符编码,其实就是制定平台默认的编码,比如中国的操作系统就用GBK,如果是美国就用,ASCII、操作系统会预装这些标准字符集。

不过这只能解决一份文档一份字符编码的情况,假设我文档里面有日语、法语,德语,俄语,中文,你说怎么办?

<>强Unicode

所以又搞了个Unicode,又称统一码,万国码,单一码。

Unicode字符集涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码,你看这种事情总得有人做,不然就没法统一。

这里有几个术语我解释一下,让大伙更加清晰一些。

<李>

字符:其实就像英文字母,或者我们的中文都叫字符

<李>

字符集:那就是字符和编号对应的集合

<李>

字符码:就是字符集里面字符对应的数字,或者说编号,比如在ASCII字符集里面,一个的字符码是65

<李>

字符编码:就是按照字符集中字符和数字的映射关系,转化成字节流的实现

对于Unicode而言有一点和之前的编码不太一样,它将字符集和编码实现解耦了。

之前的编码比如ASCII编码,GBK,编码等等,它们的字符集和编码实现是绑死的,你可以理解成以前的编码其实就是查表,有一个固定的表格里面存储这字符和对应固定的二进制,比如一个对应的编号是,65年,其二进制序列就是01000001。

为什么想法输出会乱码