本文主要介绍“为什么idea的输出乱码”。在日常操作中,相信很多人对于idea的输出为什么乱码有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解决“idea的输出为什么乱码”的疑惑。接下来,请和边肖一起学习!
前言
相信大家都遇到过乱码的人物。今天女朋友着急的走过来问我:“亲爱的,我的创意怎么输出乱码的字符?”
一次手术后我为他做得很好,但三兰亭是我女朋友,我的好奇心和我一样,所以让我来。
那为什么会有乱码字符呢?
什么是编码,什么是解码?
什么是字符编码,什么是字符集?
为什么会有Unicode?UTF-8和GBK有什么区别?
三歪坐在我腿上,撒娇似的告诉我这一系列问题。我喜欢粉,但更喜欢女朋友,所以有了这篇文章。
为什么会有乱码?我们知道只有0和1组成的字节流存储在计算机中,但只有数字不能满足我们的需求。我们还需要文本处理等等。然而,计算机只知道数字,所以我们需要告诉计算机什么数字代表什么字符。
例如,如果我为A指定0000,为B指定0001,计算机就会知道,所以如果我想将字符AB存储在计算机中,实际存储是0000001,这实际上相当于为每个字符定制一个唯一的代码。
但这是我的指定。不同的人有不同的想法。比如小明喜欢A的1000,b的1111,然后小明的电脑按照他指定的编码方式,也就是1000 1111存储,然后传到我的电脑上。我得到了1000 1111,根据我的编码可能是%,这是乱码。
所以乱码的本质就是编码和解码不对应。
有些学生可能不熟悉编码和解码的概念。让我解释一下:
编码:其实就是把字符按照一定的格式转换成字节流的过程。
解码:就是把字节流解析成字符。
可以看出,随机编码会导致每台计算机都无法正确解析的情况,所以需要有一个标准,每个人都会根据那个标准指定字符和数字的对应关系。
标准字符编码
美国国家标准协会ANSI制定了一个标准,即美国信息交换标准代码(ASCII),规定了常用字符集和对应数字的集合,例如65代表a。
ASCII实际上是一个7位代码,在二进制代码中的意思是000000 ~ 1111111,但是一个字节是8位,所以通常用8位存储。可以看出ASCII代表128个字符,实际上是美国代码。你可以看到在同样说英语的英国,ASCII中没有英镑标记。
有韩国的,日本的等等,更不用说我们中国人了。
一个字节最多只能代表256个字符,对我们来说是不够的,需要扩展。比如GB2312是我们国家标准局发布的《信息交换用汉字编码字符集》,后来GBK发布了,就是扩容的意思。在GB2312的基础上增加了繁体字等多种文字。
所以这就意味着每个国家都有自己的标准,因为语言不同,字符集不同,使得计算机之间的文档交流非常困难,所以我们又开始了一波标准化的浪潮。
比如美国的ANSI组织制定了ANSI标准字符编码,实际上是平台默认编码。比如中文操作系统使用GBK,如果在美国使用ASCII,操作系统会预装这些标准字符集。
但是,这只能解决一个文档由一个字符编码的问题。假设我的文档里有日语、法语、德语、俄语和汉语,你说呢?
Unicode
因此,创建了另一个Unicode,也称为统一代码、通用代码和单一代码。
Unicode字符集涵盖了人类目前使用的所有字符,每个字符都被统一编号并分配了唯一的字符代码。你看,这种事总得有人做,不然统一不了。
下面我将解释几个术语,让大家更清楚。
人物:其实就像英文字母,或者我们中文叫人物。
字符集:即字符和数字的集合。
字符码:是字符集内字符对应的数字或数字。例如,在ASCII字符集中,A的字符代码是65。
字符编码:是根据字符集内字符与数字的映射关系转换成字节流的实现。
ul>
对于 Unicode 而言有一点和之前的编码不太一样,它将字符集和编码实现解耦了。
之前的编码比如 ASCII 编码、GBK 编码等等,它们的字符集和编码实现是绑死的,你可以理解成以前的编码其实就是查表,有一个固定的表格里面存储这字符和对应固定的二进制,比如 A 对应的编号是 65,其二进制序列就是 01000001。
而 Unicode 不一样,它将字符集和字符编码实现分开了,比如 A 对应的编号是 65,但是对应的二进制序列就不一定了,得看具体的字符编码,如果是 UTF-8 编码,则是 01000001,如果是 UTF-16 编码(大端),则是 00000000 01000001。
这其实也是为什么我们现在常用 UTF-8 而不是 UTF-16 的原因,可以看到 UTF-16 编码存储效率较低,最少使用两个字节,并且像 C 语言的很多函数都会将 0x00 字节作为字符串的停止符来解析,所以才搞了个 UTF-8,其使用 1~4 字节为每个字符编码,是变长的,具体如何编码的我就不说了,随便查一下就有。
到此,关于“为什么idea输出会乱码”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/49663.html