老是碰到乱码问题:它是若何产生的,又若何处理呢?

刚刚阅读1回复0
zaibaike
zaibaike
  • 管理员
  • 注册排名1
  • 经验值180140
  • 级别管理员
  • 主题36028
  • 回复0
楼主

序言

英文错字难题在我们日常生活合做开发中习认为常,所以错字难题是什么样形成的呢?又什么样去化解错字难题呢?责任编纂将慎密连系根本原理和规范停止阐释,希望各人有收成。

三个简单错字的规范 package whx; import java.io.UnsupportedEncodingException; public class TestEncodeAndDecode { public static void main(String[] args) throws UnsupportedEncodingException { String str = "测试英文错字"; byte[] b = str.getBytes("GBK"); System.out.println(new String (b,"UTF-8")); } }

用GBK代码,用utf-8音频,形成错字,运行成果如下:

有关根底根本概念

要理解错字的底子原因,必要先领会清晰位、十进造、字符串、Unicode等有关根本概念。

位(bit)

位是计算机系统存储统计数据的最轻下层单元,1或者0就则暗示1位,如10010010就则暗示8位的十进造数。

十进造

十进造是计算机系统重要科技用做计算办法存储容量的一种计算办法下层单元,做为三个下层单元来处置的三个十进造位数串,是构成重要信息的三个小下层单元。

1 B = 8 bit (1十进造等于8位) 1 KB = 1024 B = 1024 十进造 1 MB = 1024 KB 1 GB = 1024 MB 1 TB = 1024 GB

字符串

字符串是指计算机系统中利用的拉丁字母、位数、字和记号,是计算机法式中最轻的统计数据读取下层单元。如a、A、B、b、大、+、*、%等都则暗示两位数串;

在 ASCII 代码中,三个大写字符串存储必要1个十进造。 在 GB 2312 代码或 GBK代码中,三个简化字字符串存储必要2个十进造。 在UTF-8代码中,三个大写字符串存储必要1个十进造,三个简化字字符串存储必要3到4个十进造。 在UTF-16代码中,三个大写字符串或三个简化字字符串存储都必要2个十进造 在UTF-32代码中,当今世界上任何字符串的存储都必要4个十进造

Unicode

Unicode是多位数串的集合,Unicode品种十分多,每一Unicode包罗的字符串特征值差别。常用Unicode名称:

ASCIIUnicode GB2312Unicode UnicodeUnicode

代码、音频

计算机系统只认识十进造的1和0,而人类都是有本身的语言的,两边要能停止重要信息交换,必需要有从文档到0、1的转化成,和0、1到文档转化成。

代码: 就是将文档字符串转化成计算机系统能辨识的0、1机器语言。

音频: 将存储在计算机系统中的十进造数导出成文档、字符串。

常用Unicode及其代码体例

常用Unicode有ASCII、GBK、Unicode等

ASCIIUnicode

ASCIIUnicode:它次要包罗大写、阿拉伯位数和Q1566A记号等可显示字符串,和二百六十名、退格等转义串。

ASCII 代码:它是美国制定的字符串代码,用做将英文字符串转化成为十进造,规定了128位数串的代码。

GBXXXXUnicode

GBXXXX系列次要包罗GB2312、GBK、GB18030,适用做简化字处置、简化字通信等系统之间的重要信息互换。

GB2312

全名是《重要信息互换用简化字代码Unicode》,全力撑持三百多简化字。国度简体英文Unicode,相容ASCII,中国大陆和新加坡都选用此代码。每一简化字及记号以三个十进造来则暗示。高十进造从A1~F7, 低十进造从A1~FE。将高十进造和低十进造别离加上0XA0即可得到代码。

GBK

GBK全名《简化字Big5扩大标准》,扩大了GB2312,参加对简体字的全力撑持,全力撑持三万多简化字。每一简化字及记号也是以三个十进造来则暗示。高十进造从81~FE,低十进造从40~FE。

GB18030

GB 18030,全名《重要科技 英文代码Unicode》,与GB2312、GBK代码相容,可全力撑持27484个文档选用变短多十进造代码,每一字能由1个、2个或4个十进造构成。1十进造从00~7F; 2十进造高十进造从81~FE,低十进造从40到7E和80到FE;4十进造第一三十进造从81~FE,第二四十进造从30~39。

Unicode Unicode

Unicode是国际组织制定的能可容当今世界上所有文档和记号的字符串代码计划。UNICODEUnicode有多种代码体例,别离是UTF-8,UTF-16和UTF-32。

UTF-8

是针对Unicode的一种可变短度字符串代码。它能用来则暗示Unicode尺度中的任何字符串,并且其代码中的第三个十进造仍与ASCII相容,使得本来处置ASCII字符串的软件无须或只停止少部分修改后,即可继续利用。UTF-8利用1~4十进造为每一字符串代码(ASCIl字符串只需1十进造代码, 拉丁文、希腊文等必要三个十进造代码, 中日韩文档利用三十进造代码, 其他少少利用的语言字符串利用4十进造代码号)

UTF-16

把UnicodeUnicode的笼统码位映射为16位长的整数(即码元)的序列,用做统计数据存储或传递。UTF-16比起UTF-8,益处在于大部门字符串都以固定长度的十进造 (2十进造) 存储,但UTF-16却无法相容于ASCII代码。

UTF-32

一种将Unicode字符串代码的协定,对每三个Unicode码位利用刚好32位元,其它的 Unicode 代码体例则利用不定长度代码。选用4十进造代码,处置速度比力快,但是浪费空间,传输速度慢。

三个规范理解代码音频的庐山面目

我们敲代码的法式员,接触最多的就是“hello word”。计算机系统只认识0和1,它是怎么展现hello word的呢?

上一末节,我们已经晓得代码、Unicode的常识。我们能用ASCII代码,把“hello word”翻译成计算机系统认识的0、1。有兴趣的伴侣能去查一下 ASCII对照表

计算机系统存储的是hello world的0、1十进造码,先将十进造码音频成对应的字符串,然后在屏幕上衬着出来,我们看到的就是hello world了

错字什么样形成的呢?

错字形成的原因次要有三个,一是文档字符串代码过程与音频过程利用了差别的代码体例,二是利用了贫乏某种字体库的Unicode引起的错字。

代码与音频利用了差别的代码体例

规范中,用了utf-8代码,利用了GBK音频,成果形成了错字。因为在utf-8中,三个简化字用三个十进造代码,而GBK中,每一简化字用三个十进造则暗示,所以形成了错字。

利用了贫乏某种字体库的Unicode

我们晓得GB2312是不全力撑持简体字的,所以利用贫乏某种字体库的Unicode代码,会形成错字。

错字又什么样化解呢

利用全力撑持要展现字体的Unicode代码,而且编音频利用统一种代码体例,就能化解错字难题了。

接下来列举一下错字的典范场景与化解计划

IntelliJ Idea错字难题

IDE项目中的英文错字难题?File->settings->Editor->File Encodings,设置一下代码体例utf-8

IDE控造台英文错字?测验考试一下那种体例,翻开IDE安拆目次,找到

在文档末尾添加-Dfile.encoding=UTF-8

统计数据库错字难题

查看统计数据库代码:

show variables like character_set%

设置session、global范畴的代码体例

//session 范畴 set character_set_server=utf8; set character_set_database=utf8; //global 范畴 set global character_set_database=utf8; set global character_set_server=utf8;

session、global范畴代码,重启mysql可能代码又变归去了,能测验考试别的一种体例。在mysql(windows情况)的my.ini设置装备摆设文件中修改或添加下列内容

[mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 [client] default-character-set=utf8 代码角度的错字难题

写代码的时候呈现英文错字?逃踪定位到代码音频的处所,设置用统一种代码体例。

一路走过来,我看见身边也有良多自学Java的伴侣,但是我看见良多都从入门走向了放弃,其次要的底子原因就是他们没有做好有关的进修规划和道路,那才招致他们走了良多弯路,以此思疑本身能否合适进修Java编程,最初选择放弃。若是各人在入门进修Java的过程傍边有碰见任何关于进修,行业方面的难题,都能申请参加我的Java手艺自学交换群,有任何不懂的各人都能随时来交换,万万不要选择三小我孤军奋战,只要不竭交换的碰碰,我们才气发现难题的底子。

-------686827638

做为三个法式员,手艺不是独一出路,但手艺也长短常重要的,如今合作越来越剧烈,只要不竭的进阶才是我们的出路

编程是三个奥秘而又斑斓的范畴,那个范畴的大门像着所有拥有抱负的人们敞开。编程也是三个残酷而又充满合作的范畴,随时会裁减掉不敷勤奋的人。

2019年最新Java精讲视频,PDF册本教程,面试题,进修手册点击进入下载

❤️ 看完有所收成?希望爱进修的你不要鄙吝三连击哟[点赞 + 保藏 + 评论]~

文章做者:Jay_huaxiao来源链接:老是碰到错字难题:它是什么样形成的,又什么样化解呢?掘金https://juejin.im/post/5e087ac46fb9a0165d74f5fb

0
回帖 返回网络科技

老是碰到乱码问题:它是若何产生的,又若何处理呢? 期待您的回复!

取消