00:00
现在我们登录失败了,他确实是把错误消息他传过来了,但是这不是我想要的效果,我想要的是在我们页面当中把错误的信息显示出来,并且在我们的后台程序当中,我们这里是中文的文字。那我们就需要在页面中把它提示出来,所以我现在打开登录的页面,在它表单的前面,我们来增加一个间括号H1标题。写完之后在这边我增加一个样式,Style color right,红色,那好,我要把地址栏当中的这个参数给它取出来,所以这个不要了,写上我们EL表达式中有一个内置对象叫per,它可以直接获取地址栏当中的参数,叫A。
01:02
Message。好了,那我写完之后啊,我就直接来刷新一下,刷新刷新以后你会发现,没错,确实有东西出来了,可是它全都是问号,这不是我想要的,我想要的是正确的文字,可是这里是问号,为什么呢?因为我们出现了一个web系统当中经常会出现的一个问题,叫做字符乱码问题。字符乱码问题是什么原因产生的?那么怎么解决呢?我们一块儿来分析一下。首先我们来给大家问这么一个问题。比方说我现在如果我写上一个幺幺,我问问同学们,你们觉得它现在是个什么数字?诶,有的同学说了,这是一个什么呀,这是一个11嘛,啊一看不就是个11嘛,对不对,这是最简单的,但是我相信有的同学他也会认为这个不是11是多少呢,是三。
02:12
那么他说的对不对呢?我们说也是对的,那还有同学说。他是我们的17。还有同学说他是我们的九,那其实大家想一想,我们这些是不是都对呀?为什么这么说?因为。你的11如果按照十进制的方式把它做转换的话,是不是就是11呀?那如果你按照二进制的方式来做转换的话,那么它的结果是不是三呢?那如果你按照16进制的话,那么我们的这个结果应该就是17了吧?那如果我们这里按照我们八进制的方式,它的结果是不是就是九啊?
03:00
所以我们说呀,这几种结果都是对的。那么如果它都是对的话,那么出现这么一种情况,你该怎么办?比方说我现在啊,我想把这个17我变成三,我该怎么做?也就意味着呀,我本来是想得到三的,诶,但是我进制转换出错,哎,我得到了个17,那你怎么把17让它变成三,大家想一想。其实你想一想,我们只要把17按照16进制的方式转换成幺幺是不是就可以啦?然后再把幺幺按照二进制的方式,是不是就得到了我们想要的三呢?所以大家可以想象一下,这就是我们把17变成三的一种方式,而这种方式恰恰就是我们解决乱码的思路。
04:00
为什么会出现乱码?就是因为在我们传递数据和展示数据的时候,它的字符编码不统一导致的。问问同学们,你们觉得我们写一个中文,我们真的写的是中文吗?来举个例子。我们在我的这个地方,我们增加一个配置文件,这个配置文件我们new创建一个文件叫做configu点。Proper。好了,写完以后啊,我现在想在这个文件里面写个中文,咱们就写上一个我这儿吧,好,我写个我这儿,大家看我这是不是我呀,OK,我写完它,我写完了以后,你发现我写的是那个我这儿吗。不是。也就是说,你写的内容和你展示出来的内容其实不是一回事儿。好好,接着咱们再来看,那么再往下呢,大家看我写个斜杠U。我写个斜杠U,然后写个6211,我问问同学们,我写的是中文吗?不是我写的就是几个字母加数字对吗?但是你鼠标放上去你看一看。
05:13
是不是两个我字,那就说明你写的内容其实最终展示成什么效果是不确定的,它可能是中文,也可能不是,它取决于它的一种编码方式。所以我们刚才的这个地方就是这个样子,我们真正写的是什么,是他。但是呢,你按照二进制的方式呢,那么得到的就是三,按照16进制呢,得到的就是它,这就好比啊,我们写一个文字,我们得到了一个幺幺,可是呢,你采用的是我们的UTF杠八,那这个时候你就得到了一个我这儿咱们的中文我这。可是如果你换另外的一种编码方式,比方说是我们西的编码,比方说ISO8859杠幺,那么这个时候他可就看不懂了,所以它的结果就是问号。
06:12
这就是我们乱码产生的原因,我们刚才的这个位置不就是问号吗?就是因为编码不统一造成的。那好老师呀,那原因我们大概的了解了,该如何解决呢?那么大家想一想,我刚才怎么说的,你如何把17变成三呢?你这里是不是乱码,我是不是要把乱码变成中文,怎么做?你应该把乱码的字符串按照错误的编码格式转换成它原始的输入内容,对吧?然后你再把这个输入的内容按照正确的编码来进行转换,你是不是就得到了正确的中文呢?这就是我们的解决方案。
07:00
啊,你把这个如果能够考虑明白那就行了,那好,我们来看看我们该如何实现这个功能。比方说呀,在我们程序当中来,我这个先给它关掉吧,我们不要了啊,把这个给它关掉来delete,那我现在我们准备怎么办呢?给大家演示一下来同学们看。我现在咱们这个U里面不就是把我们的。表单数据拿到了吗?那如果你的表单数据你拿到的是一个中文,那我这里就可能是什么呢?乱码了,为什么?因为编码格式我并不清楚,所以啊,我们来看一看,所以大家看我们写上咱们叫做string,叫做login account,它等于U的点get login好了,我把它拿到以后,现在我加一个断点。我们看一看,我们拿到的是不是我们的。
08:02
中文还是乱码,把这个去掉,我们重新给它debug运行。好了,我们现在已经启动完毕,那我现在呢,试一试我后退,后退以后这个叫admin,它叫admin,但是现在不行了,我要改成中文了,我还是写个我这。我写个我这儿,然后呢,我们点击登录,我就看一看我们的结果是什么,我这里呢,加了一个断点,一旦我点击登录之后,会执行到断点的位置点。点完之后,在我们这个地方,我就走到了我们断点的位置,那我就看一看我们当前的那个账号是什么。大家看一下这个登录的账号,你看得懂吗?反正我是看不懂,说明它已经不再是正确的中文了。
09:05
那为什么呀,我们刚才明明提交的这个中文呢,为什么你得到的结果却不是中文呢?就是因为在整个的过程当中,我们的编码方式发生了改变。我们在传递数据的时候,我们会采用当前浏览器的编码方式来传递数据,那就意味着我们当前浏览器的编码格式是UTF杠八。那么你提交的中文,它会按照UTF杠八的方式把它传给服务器,但是我们服务器啊,它在解析这个文字的时候,他用的是ISO8859杠幺,这是他默认的编码。所以说你的编码格式不统一,就导致了我们出现了问题,我们把正确的中文按照UTF杠八的方式给它传给服务器,可是服务器按照我们错误的编码把它展现出来,我们怎么可能看得懂?
10:05
那我们该怎么办?很简单,咱们之前说过了,它有一个转换的规则,我们一块儿来看一看,首先我们前面说了。将我们的乱码字符串按照错误的编码方式给它转换为我们叫原始的字节码。序列。因为你写的是个中文,但是其实它是一些字解码组合成的,所以我们要回到最开始的字解码序列,那么也就意味着你把最原始的内容得到以后,我该怎么办。我要按照。正确的编码,把它变成正确的文字,所以我们来往这看。我们写上它将。原始的字节码序列。按照。
11:04
正确的编码转换为正确的文字即可。好了,那这个我们简单的逻辑已经有了,我们看看如何通过代码来实现它,第一个这个已经是乱码了,那这个乱码呢,我们就直接来我们点。Get,我们叫获取字节码序列,只不过我按我要按照错误的编码来进行转换,所以写上ISO8859杠幺好了,写完之后他得到的其实就是我们的字解码序列,咱们叫BS。写完之后这里呢,我给它抛出一堂吧,嗯。好,那我现在这个原始的字节码我们已经知道了,我如何把它变成中文呢?我们说了log in account,它就等于new string,我要创建一个新的字符串,这个新的字符串要把它的内容给它放进去,然后按照正确的编码给它转换成正确的中文,那就够了。
12:24
所以啊,我们这么写是可以的,那好对不对呢,我们再来验证一下,把断点我们移到这个位置,好,接下来把我们的服务器重新再来启动一下。好可以了,那接下来我们就后退,我们刷新,刷新以后我还是写个我这儿,然后后面写个mi,我就随便写了啊,然后我点击登录,我要看一看,点点完以后它会走到这个位置,我们再来分析一下来我看一看。
13:09
那么大家会发现,没错,我的logging还是乱码,咱们往下执行,往下以后,那我现在就得到了它的字解码序列是一个数组啊,那么我是通过什么得到的呢?我是通过那个错误的编码得到的,我现在要按照正确的编码把它变成正确的文字,往下走点,点完以后大家看一下这个logging account还是乱码吗?不是啦,它已经变成了正确的中文。
我来说两句