java初学者关于编码问题,知道这些就够了

几种常用编码:(这是一串悠长的故事。。。)

ASCII:美国标准信息交换码,占一个字节的7位

       历史解读:这源于美国,最开始美国人思考如何让计算机读懂英语语言,于是就用一个字节的前7位用0  1进行排列   组合,将所有的美国字母、符号包含在内,不过毕竟英语语言的标记符号有限,则使用7位即可全部包含其中。

ISO8859-1:  拉丁(欧洲)编码表,占一个字节的8位

      历史解读:在老美编写完属于自己的编码表后,属于拉丁语体系的欧洲人就不服气了,不行啊,我们也要建立属于我 们自己的编码体系,于是乎ISO8859-1便孕育而生,并且还写入了tomcate服务器里,让后世使用tomcate的程序员因为编码问题而无可奈何,谁让人家大佬呢。

GB2312:   早期咱中国自己的编码表,占两个字节

      历史解读:在继老美编码,欧洲编码之后,中国人自己的编码表也横空出世,让计算机也可以识辨中国的语言,但也有缺陷,这个编码体系,只收藏了6763个汉字,功能有限,但也给后续的GBK的出世打好了铺垫。

GBK:  延续至今使用的中文编码表,占两个字节

      历史解读:这个编码表就很棒了,能收纳的汉字包括字符,就有21886之多,功能之强大不言而喻,内容包含之广无可厚非,实乃让中国文化与世界交流作为工具的上乘之品。

Unicode:  国际标准码,占两个字节   java就是用Unicode编写的

       历史解读:后来各个国家,各个文化的民族也都占出来,编写发布了属于自己语言体系的编码表,导致编码体系的凌乱,每当使用他方国家的文字时,就需要向电脑里导入他方国家的编码表,实属繁琐,所以,这个时候,国际上 The Unicode Consortium(同一码联盟),就站出来了,说,好了好了,你们不要吵了,既然如此,我们就编订一个可以包含全世界所有语言字符的编码表不就好了,于是Unicode(音似:you  yi   ku)便肩负了这个光荣的使命,就真的将全世界的文字字符全包脑囊括其中,当然也不能太强求苛刻,一些小部落,使用人群过于局限的语言就没有包含。这样就解决了很多的编码表上的冲突。减少了导入新的编码表的繁琐,只需要一种编码表就可以解读所有的文字。

UTF-8:万国码,最多三个字节

      如果说Unciode是字符集,那么UTF-8就是对Unciode字符集进行编码的一种编码方式,也就是一种编码规则,如果 想纠结具体实现方式的小伙伴呢,可以参见百度百科里的解释,反正使用UTF-8最大的好处就是可以更好的解决无谓的中文乱码问题啦。UTF-16也同理,好奇的话可以多研究研究,但初学java的话看这些会让头脑崩溃,慢慢来吧。

      更多批注:编码集就好像谍战剧里,发电报时候的那个秘密神奇的密码本,一个字符对应一个编码,所以当我们使用了错误的编码表进行解析时,自然就会从错误的编码表里去匹配字符,这也就解释了乱码的问题。其实,有的时候,如果错误的进行了编码,还可以通过反编码再编回去,再用正确的编码集编回来,但是,注意了,有时候还会发现,错误解析编码时出现了一个“?”这就是,在编码集里找不到对应的编码,而在未知编码区内使用了“?”来进行匹配,如果出现了这个,想再编码回去,那就困难了,因为“?”有它自己自身的编码对应的二进制数,基本不可能再回到原始的编码数,所以,不幸的就是,这样字符就不能再编码回去,再重新用正确的编码表解析了。

       早安喵~啦啦啦~~~


猜你喜欢

转载自blog.csdn.net/zaoanmiao/article/details/79675162
今日推荐