原因是今天写项目的时候,引入github上面的xml文件,还有就是执行SQL命令的时候出现了编码错误。虽然idea给出了一键解决方法,但是这个编码错误让我
想起了以前做汇编实验的时候也出现许多由于编码错误而出现的乱码。于是就称今天的时间,好好的研究一下编码这回事。

什么是编码

编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。 这是从百度百科里面抄下来的专业术语。其实简单来说就是计算机只能储存0,1这两种信号。所以当我们要储存英文字母,中文字符或者更加复杂的字符时。就要按一定的规则,将字符转换为计算机可以储存的0,1信号。这个转换的过程就是所谓的编码和解码。

编码的种类和历史

常用的编码方式

  • ASCII 码
  • 扩展的ASCII码
  • Unicode符号集
  • UTF-8
  • GBK/GB2312/GB18030(win10中文系统默认编码方式一般是GBK)

编码的历史

计算机最早是由美国人在使用,于是由他们制定了二进制编码中8bit为一个字节(0~255),划定了0-32的控制码、26个大小写英文字母以及若干个英文符号的二进制编码,将一个字节使用到了127号,因此在ASCII码中一个字节就是一个英文字母,很好计算。这种编码方式就是ANSI的ASCII码,这也是计算机最初使用的编码方式。

随后很多欧洲国家也开始使用计算机,进而占用了一个字节的剩余128~255的位置,称为 ISO 8859-1

随后计算机逐渐在中国日本等国家流行开来,这时候就需要一种对应中文的编码方式。如果只是延续ASCII码的规则的话,常用汉字就有6000多个,之前针对英文字符定义的8bit=1字节完全不够用。于是就想到了对于ASCII码进行扩展,用两个字节表示。并且将这种编码方式命令为GB2312

但是中文的系统比较复杂,GB2312本身不够完善,所以随着时间发展就产生了GBK(也是现在中文系统最常用的),GB18030等字符集。他们都是中文字符的编码规则,但可以编码的内容存在一些不同。

既然中文会有中文专有的编码,那么日文韩文这种肯定也会有自己的编码。为了解决各个国家编码方式不互通。导致乱码无法交流。出现了一个叫 ISO 组织(国际标准化组织)决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号 的编码。这就是Unicode。unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了。顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。到这主流的编码方式已经发展的很完善了。

为什么会乱码

乱码出现的常见原因

(这里单指编码方式导致的乱码)

众所周知,计算机使用文档要经过 编写-储存-读取-使用 这些过程。所谓的编码就是将你输入的字符按规则编写成二进制码而储存在硬盘中。而解码就是读取你的二进制文件按编码规则逆过程将解码出来的字符集输出到你的屏幕上(也不是必须要输出)。很容易看出来这个编码和解码的过程使用的字符集和编码方式必须要是同一种。否则就会出现乱码。

我们平时在用哪些编码方式

看完上面,这个时候就有疑问那么键盘输入的时候使用的是什么编码。其实输入法在往程序输入的时候,程序会指定自己想要的编码方式。在输入法输入后会在内部进行一个转换。转换成对应的编码方式。同样的解码时程序也会有一个指定的解码方式。如果编码解码时找不到这个指定的编码方式,那么就会采用系统默认的编码法方式。win10系统默认编码方式可以cmd输入命令chcp查看。

关于自己遇到错误的解决

xml文件乱码

从设置中我可以找到自己的idea设置默认编码方式是GBk,但是从github下载下来XMl的文件编码方式是UTF-8,系统默认的解决方式是对文件重新编码。转换成了对应GBK编码的文件,同样的我将默认的编码方式转换成了UTF-8在导入原来的xml文件也可以正常读取。

SQL语句乱码

这个错误最多就是出现在时区的设置,如果不指定encoding—UTF-8那么就会出现很多乱码错误。其实这个错误和上一个是一样的。都是编码方式的不匹配。