00:00
那么关于缓冲流啊,咱们就告一段落了,诶缓冲流这块呢,放了一个客户练习题,诶这个练习题的话呢,其实呢,就是在对比我们的这个文件流和这个缓冲流呢,在复制文件方面的一个效率问题啊,所以这块呢,咱们其实也已经在这个文件里边写过了啊,这个代码呢,也提前给到大家了啊这个大家呢也可以下来再看看,其实跟我们这块写的呢是类似的啊,这个呢我们就不用讲了,接着的话呢,我们来看下个流。这个相当于处理流的第二个,哎,我们称为呢,叫做转换流的一个使用。转换流,看这名字呢,就暴露它的一个作用了啊转换。诶转换什么呢?这个就涉及到我们字节和字符之间的一个转换了,诶这块又回到我们以前讲到的字节字符是吧,这块提到了比如说字符的编码,字符的解码,哎这样的一个过程,那比如说字符的编码,注意这块是个编码的过程,那我们是字符转字节还是字节转字符呢?编码应该是从我们能看得懂的。对,从我们能哎看得懂的哎转换为我们看不懂的。
01:06
OK,所以这块我们能看懂的就是字符呗。哎,字符或者我们叫这个字符串,或者我们叫这个字符数组是吧,都可以啊,然后呢,把它呢,转换为我们看不懂的,那就是字节。哎,字节或者叫字节数组是吧?诶,那这个过程呢,我们就称为呢,叫字符的一个编码了,解码呢,就是它的一个逆过程,那我们把这个呢,写出来是我们从我们看不懂的。嗯,懂的是吧,看不懂的。看得懂。的是吧,诶到我们看不懂的哈,从我们看不懂的呢,到我们能看得懂的。嗯,OK啊,那这个过程称为呢,叫解码,那也就是我们这样的一个过程,从这个字节或者叫字节数组,诶把它呢,转换到我们的字符字符串或者叫字符数组。OK啊,这样的一个过程,行,那这块呢,我们实际上呢,就考虑到这个转换流的一个使用,那它呢,比如说有什么样的这个呃情况呢,你比如说哈,咱们前面呢,在做相关的这个测试的时候呢,呃,其实没有出现过这样的场景,呃当然呢,如果你下来自己测试的话呢,有可能会出现这样的问题,什么问题呢,比如我们前面呢,讲的叫fair了。
02:17
这个fire呢,处理的也是这个叫字符了哈,呃,但是的话呢,我们如果有一个文件,这个文件的话呢,呃,比如呢,我们就是使用这个JK呢来存储的。啊,JBK来存储的,相当于呢,当初我们保存这个文件的时候,相当于呢,当初的叫编码吧。从内存当中的啊,你比如我们有个中国的这个中,内存当中的这个中,我们保存到这个文件中的时候,这呢,其实叫编码吧。没问题是吧,啊编码的时候呢,我们呢,使用的是叫JBK了,那么我们当时也讲过哈,编码完了以后呢,我们现在是不是要把它读到内存中去解码啊。在解码的时候呢,我们是不是也得使用你这个解码,得用当初编码使用这个字符器才可以。而我们这idea呢,如果你要是默认设置的是U的时候呢,我们拿着这个JK编码这个文件呢,去解码去读,这时候你发现呢,出来的就是一个乱码的情况了。
03:08
诶,所以这块我们得需要呢,有个这个转换的操作才行,哎,我们就需要呢用到,诶目前咱们用的这个叫转换流才可以。OK啊,那通过刚才咱们这样一个讲解呢,这块不也提到了一个点哈,那在如果希望呢成立在读取文本文件的时候呢,不出现乱码,需要注意的问题,结合我们上面讲解,就是说我们在使用这个解码时候是吧?解码时使用的字符集一定呢是当初这个编码时候呢使用的字符集。啊,这写一下啊。哎,解码时使用的这个,哎,字符集必须呢与当初是编码时。哎,使用的这个字符集得是字符集啊,取得是相同的啊。啊或者呢,你得至少是一个兼容的啊,这个才可以啊,一般呢,咱们其实呢,就说相同就可以了。好,那这块的话呢,我们刚才提到这样一个场景,它呢就出问题了啊,出问题怎么办呢?我们需要呢,得用这个转换流了,转换流的话呢,它就能够实现这个字节和字符之间转换啊,你比如说我们把这个字节转换为这个字符。
04:10
转换成字符,这看不懂的到看得懂的,这时候呢,就相当于是我们的一个叫解码的过程了,解码的时候呢,我们就可以来指明你这个解码集了,诶那对应的这块呢,就是个编码的过程,可以指定这个编码级。OK啊,是这样子的啊,你比如说回到我们这块啊,假设呢,我们这个文件。哎,我这个文件呢,是UTF8或者叫U杠八都行,这个字符集呢存的。相当于当初呢,你是用的这样的一个字数集呢,进行了一个编码,对吧。存到这个文件里了,那现在我们要把它读进来的时候,读到我们这个程序当中的时候呢,是不是我们也必须使用U8呢去解码才行。诶,那这时候咱们在这个转换流这里边呢,就可以指定,诶你读出来的呢,我们假设就先一个一个的了,然后呢,我们就按照U这样的一个,咱就解级是吧,进行一个解码操作,回到我们内存层面呢,咱们就能够看到的都是正常的字符了。
05:03
诶,这块你看就有一个叫解码的一个过程啊,然后呢,如果我把这个内存当中的能看得懂的这样的这个字符是吧,再把它存储到一个文件中。那文件呢,咱们说在物理磁盘上的底层就是010101是吧,这都是一些字节了哈,我们再把它存下去的时候呢,你就得对应的一个数了,相当于由字符呢,又到字节了。这时候呢,字符到字节,这就是相当一个编码过程,编码过程的话呢,我们可以指定它这个编码集。这样你说我不想用这个U了,我想给它改成另外一个叫J也可以,那你只需要这块指定,你这个编码是啥就行,比如这块指定,那写出去的这个文件呢,就是一个JB格式的一个文件了。OK啊,那么在我们刚才讲解这个过程当中啊,出现了这个字节转字符,这个呢,我们用的叫解码集,这个我们可以在转换流里边呢,指定出去的话呢,字符转字节的时候,然后我们可以呢叫编码了,诶这个编码集呢,在我们这个转换流里边呢,也可以去体现。
06:03
好,那么针对于咱们这个图。啊,这个大家脑海当中呢,诶浮现一下这样一个图,然后回过来,诶我们这块看一下啊,首先呢,这块呢,提到这个转换流对应这个API呢,我们说就这两个。啊,它的作用呢,哎简单来说,我们说就能够哎实现字节与字符哎之间的一个转换。啊,那对应的其实就我们编码和解码这两个过程行,那对应的API呢,我们说呢,有两个啊,一个呢叫你看这个名字呢,起的也比较有特色啊,诶这个呢就叫input stream,然后呢,补了一个reader。那有点像呢,我们前面讲的四个呢,叫抽象鸡肋啊,这呢其实就直接用了其中的两个了。啊,Input就啊那这个话呢,我们怎么说呢。啊,它呢,我们说呢,可以将。呃,一个其实呢,简单来说就是字节转字符了是吧,但是这块呢,因为它是个流了,所以我们里边包的的话呢,它也是一个处理流嘛,它可以包一个流,包的是什么流呢。
07:01
包一个字节流。相当于呢,它可以通过呃,因为字节流里边处理都是字节嘛,它可以呢,将一个输入型的一个字节流。通过它这样转弯之后呢,它就变成一个输入型的字符流了。啊,所以这块啊,可以呢,将一个呃,输入型的字节流。转换为。诶,我们叫输入型的字符流。哎,这个注意它这个特征,然后这块呢,对应的这个呢,我们叫output。I stream writer。啊,这个呢,就是我们对应的另外的两个抽象积累合并在一起。啊,这个人注意啊,他怎么说呢。将一个输出型的。字符流转换成一个输出型的字节流,对这样你这个流呢,往外写的话呢,不都是一个一个的字节的方式吗。这样的啊,相当于这块不自然而然的也实现了字符转字节,这呢就相当于是一个编码的过程啊。
08:01
诶,将一个输出型的字符流。诶,转换为输出型的字节流,这个注意一下啊,别写错了啊,有的呢,这个我看一些帖子呢,就写写错了啊,它这个叫输入型的字节转字符,这个呢,叫输出型的字节转字符是不对的啊。它呢输出的话呢,明显的是把内存中我们能看得懂的,主要能看不懂的,这呢是字符转字节啊,这个别写反了行,这呢就我们说的这样一个问题啊,这个说完以后呢,下边咱们就可以呢,适当的比如咱写写这个代码了。好,那这块呢,咱们把这个课件里边,这不是有这个文件,还有一个文件D是行的,你通过这也能看啊CS这不叫S。哎,在咱们这个Windows操作系统上就是AK啊。好,那这样呢,我就把这个文件呢,CTRLC一下,那我呢也放到了当前的这个model下,CTRLV,诶粘过来。哎,粘过来的话呢,你看在我们买第二种,因为默认的是JB是U8了啊,所以这个JBK的话呢,它就呈现这样了啊,你要说re in,你一点这块就发现了,我这就点不点都行了啊好回过来现在的话呢,我们有两个文件哈,一个呢叫诶DBCP呢下划线JBK,一个呢叫DBCP,下划线呢叫UTF杠八,针对这两个文件,哎,咱们来看看这个转换流的一个使用。
09:21
OK啊,这块我们就先给他写一个。啊,比如这块名字呢,叫input。啊stream,哎,这个reader其实呢,我们这四个呢,就都写到这里边儿都行啊。哎,我就以它为例吧,咱们写这个名啊。好,这个我们先写一个这个TEST1,诶这个呢,我们做个什么事呢,咱们针对于这个文件。啊,先说这个DBCP_U杠八啊,针对这个文件呢,我们把它呢,读到咱们的这个内存当中。诶,我们看看该怎么去做哈,首先啊,第一步呢,还是我们得先创建这个file的对象了。哎,这么哎这么着啊。
10:00
好,那对应的就是我们这个文件,CTRLC一下这个我们把它粘过来没问题,好注意哈,我现在呢,首先呢拿一个流,这个流呢叫做file input stream。就我们说他的一个叫输入型的字节流啊。哎,File input stream,咱们呢,把这个FILE1呢,我给放进去了,相当于这是个四节了。然后我现在呢,在它上面呢,我去包装一层呢,叫input stream reader。啊,然后CTRL一下你会发现呢,我们这个构造器的这个呢,可以放个就是一个输入型的字节流啊,那典型的就是我们这。对,那我就扔进来了。好,扔进来以后。那我们现在呢,得到的这个input stream reader啊,我CTRLH一下。他的这个负类呢。就是read了,说白了就是它本身已经是一个输入型的字符流了。那那我们现在要想把这个文件中的这个内容给它读出来,我是不是就应该用的叉型数组了。
11:01
哎,这个注意啊,好,你一个X型的数组,比如1024,哎,没问题啊,In的L音。啊,1024啊1024好,然后接着的话呢,我们来一个L1呢,就等于IS2点瑞到我们这个当中返回呢,如果是不等于负一,说明里边呢就有内容。啊,没问题是吧,然后有这个内容的话呢,诶,我现在想着说你把这个内容我们要写在控制台上吧,那这块我们就可以呢,这样比如string型的itr,哎,我就扭一个string吧,把这个CB呢给它拿过来,然后0L音。哎,这么着一下啊,这块我们直接再打印跨行就去了。哎,这样就行。啊,这个体会一下啊,这呢,就是咱们具体的一个叫诶读入操作啊。好,然后完了以后呢,最后哎,关闭资源。这个呢还是一样的啊,我们只需要它关外层的这个呢就可以了,内层这个FS呢,咱就不关了。行这呢,还是咱们说的这样几步啊,第一步呢,就是诶创建。
12:04
这个的这个对象。哎,这个创建我们的流对象。诶没问题,那这个呢是内层的,这个呢是外层的,所以呢,它也是我们说的一个处理流了。好,这块我就还是简单起见哈,我就肉了。看怎么着了啊,这个其实还是应该TRY开始翻了啊。好,完了以后呢,我们跑一下。是。诶好了,这时候大家你会发现呢,你看也没有什么乱码问题。没啥事儿啊,这块呢,似乎你也感觉不到,说这块哪有这个字节字符的一个转换啊呃,其实这块呢,我们这样的一个写法呢,就默认呢,使用了咱们idea当中生命的这样的一个字符机了。诶,那idea呢,咱们设置呢,就是UI8了,所以这块呢,我们这个文件呢,因为它正好也是UI8,所以我们这块读的时候呢,也是U,其实呢,就没有出现这个乱码的问题啊说呢此时。
13:00
哎,使用的是。啊,咱们idea。Idea。这个默认的啊,UTF8或者叫UTF杠八都行,这样的一个字符集。那在咱们这个问题中,因为你是字节,是不是字节嘛,转换成这个字符了,实际上呢,是一个叫解码集是吧。啊,那由于呢,我们原来呢是UZI8存的,所以这块你在解码的时候呢,也是用U8,其实就没事儿,那如果你要是显示的给它写出来的话呢,你看我把上面这个给大家注释掉啊,咱们换成下边这个。啊,这个换成新的这个了哈,换成下边这个的时候呢,我们把这来一个逗号哈。诶,然后呢,我们CTRLP一下,你发呢,我们还可以填写一个润型的叫set name。这个就相当于显示的指明我们使用的这个叫字符集了,那我们这块要想让它不出现乱码,是不是就得UTF杠八是吧。哎,那这块呢,我们就得写明啊,就是显示的使用啊,UTF杠八这样的字数机。
14:04
啊UTF杠八的这个字符集好这个呢,我显示的就写成它了,诶这块我们把这个资源关闭,这块也调一下,然后呢,咱们再去做一个run。是不是也是没问题的。OK的行,那这块能想到怎么着就会出现问题吧。诶CTRLC一下是吧,诶我再复制一份过来啊,给我们改成二,然后这块呢,如果我们把它改成叫。哎,JBK了。这时呢,就表示,然后把这个呢,就删一下了啊。这也表示我们显示的使用呢,叫JBK的这个数集了。OK,行,来咱们看一下啊。你看这块是不是就出事了。啊,因为呢,人家这个文件呢,本身呢,存的时候呢,通过这个名咱们也能看到啊,我当初就是用的U存的,现在你在读的时候呢,呃,原来的话呢,在这个中文啊出现的情况下呢,我们是三个字节看成是一个字符了啊是一个汉字了,那现在的话呢,你这样读是不是相当于拿着两个两个这样去读了。
15:06
因为JK当中呢,是两个字节表示有汉字了,所以这块你在读的时候呢,必然会出现这个乱码的场景啊。OK啊,所以这个我们在这说明一下啊。说呃,读取到的这个数据呢,还出现了这个乱码。说因为。啊,这个我们说这个文件哈。啊,这个文件使用的是。哎,我们说的UTF杠八的这样的一个字符集啊,进行的编码吧。诶,所以呢,在呃这个读取此文件时。啊,读取此文件呢,杨言真呢,就是从字节要到字符了,啊读取此文件时呢,使用的。啊,这个叫解码集。那必须呢,也是啊,U杠八。
16:00
哎,这样是吧,哎,否则呢,会出现这个哎乱码。OK,那咱们这里面就是典型的这样一个场景。就不对是吧,OK啊好这个呢,说完之后呢,咱们比如说我把这个呢CTRLC咱们呢,再来一份啊,这个我写成是一个叫三了。没问题啊好,这个写完以后的话呢,我这个位置我就不改了啊,这个不改的情况下呢,咱们不是还有个文件吗。DBCB_JK诶这个文件呢,我把它这做一个替换啊。这个文件呢,因为它使用的就是JBK的这个字符集进行的编码了,所以我们这边解码的时候也是JBK,这时候是不是就没事了。来,我们跑一下。他呢,又是正常的了。诶,所以通过我刚刚才这样一个演示呢,诶大家呢,能够注意到的就是呃这样的回过来的这句话啊。说解码时使用的这个次数集必须呢,要与当初你编码时候使用的这个次数集呢是相同的。OK啊行不相同的话呢,就可能会出现乱码了,所以我这块说的是可能出现乱码。
17:03
对,实际上主要呢,不是说非得要相同,应该是叫兼容是吧。对,你比如说我们这个诶文件啊,这个文件里边咱们这儿呢,其实是一个啥呢,是咱们以后呢要讲的一个,呃,数据库连接的一个数库连接池啊,里边的一些参数了,当然这个大然你不用去管啊,主要呢,就这里边呢有一些中文了。那你要单独的光看这个英文的话呢,不管是JBK还是我们U杠八,它其实呢,都兼容这个我们底层这二次码了,所以这块我们当初啊在上面这个呢,说虽然出现了乱码,但是这个乱码呢,你发现呢,只是针对于中文出现了这个英文的话呢,是完全不受影响的。如果这个文件的话呢,它完全都是英文的这种abcd,那其实呢,也不会出现乱码。所以回过来的话呢,这呢,哎,我们说的叫相同,然后呢,由它呢,可以做一个拓展是吧。啊,就是更准确的讲的话呢,就是解码级。必须呢,要与编码级要兼容。就可以了啊,比如呢。
18:01
比如说啊,我们说这个文件呢,呃,使用的是。使用呃,文件编码使用的是。哎,比如我们接着叫AJBK吧,是吧,然后解码时。呃,使用的。哎,是,那我们叫。呃,Utf这个呢,杠不杠这个写不写这杠都行哈,解码时呢,使用的是这个叫UTF杠八啊说呢。哎,说如果这个文件中是吧,只有这个abcd等这个英文的字符。啊,说此情况下呢。啊,也不会出现乱码是吧。啊,这个呢,就是因为呢,大家都兼容了我们这个X码啊。因为啊,咱们JBK。诶和啊UTF杠八。哎,都向下。
19:00
哎,兼容了啊,我们说的它叫阿玛。嗯,这是大写的啊,你要写成小写的话呢,那就是这样了。AI后边这是两个I啊,注意好,这个呢,就我们说的这样的一个场景,就是这个呢,我们说相同的是最好的啊,在一些极特殊情况的下呢,你说不相同啊,那也行啊,这呢就是我们说的这样的一个场景。好,这个呢,我们就说到这儿了啊,然后的话呢,我们可以呢,基于刚才讲的这个点呢,咱们再讲一个这样的问题。啊这呢,其实一个具体的需求了,这个需求呢,咱们就把这个输出的这个流呢,也给它包含在进来了,怎么办呢?诶我们这么着啊说呢将诶咱们叫呃UTF杠八或者反过来吧,将这个JBK是吧。格式的这个文件啊,说转换为叫UTF杠八这个格式的文件存储。有这样一个需求。
20:00
三有了这个来个四啊。行,你看这个是什么问题呢?你比如说刚才哈,咱们这个DBCB呢杠JK,你看这个文件的话呢,我们要打开看呢,就是诶显示的是一种乱码特点哈,说呢,我现在呢,想把这个文件呢,改成使用DBCP啊,下划线啊,比如UT8使用UTF8这样的一个格式呢,进行存储。啊,怎么办呢?诶回过来啊,那这块呢,我们就相当于啊,还是这样的几个步骤,第一步呢,还是这个造文件。嗯,第二步呢,还是这个叫哎造流,哎简单来写啊,哎,下边就我们这个读写的过程。那还是第四步,关闭资源。诶,它是这样的一个过程,好第一步怎么办呢,我们把这个JP格式这个文件呢,给它读进来,那因为呢,你当初存的时候使用的编码集呢,是JBK。那我这块呢,解的时候呢。是不是也用GPK啊?
21:00
好,那解完以后呢,在我们内存里边已经变成字符了,我再给你写出去的时候呢,是不是要变成字节了是吧。那这时候呢,我是不是就显示的给你改一下可以啊。哎,我就改成U杠八了。哎,你来的时候呢,这个没得选。因为呢,你当初编码的时候使用什么,我们解码的时候就也得用什么,当然直到回到内存中以后呢,我在出去的时候呢,这个我是用U8也行,我用JBK也行,这个咱们就可以比较自由的去选择了。哎,就是这样的一个思路啊好,那回过来咱们呢,就把这个文件。啊,给它改一改啊好,首先呢,这个FILE1,你有一个具体file,把这个文件呢,CTRLC咱们粘过来。现在呢,我把它呢给写出去啊。我叫个饭碗。哎,这么着啊,哎,然后呢,比如说还是把它拿过来这个我们这个位置呢,改成一个比如叫to啊utf。啊,这个我就写个八也行啊,啊这里就给大家写出去了,下边呢造这个流,然后呢,针对这个文件的话呢,我们先拿一个叫file input stream。
22:05
哎,给他俩去做一个对接。把这个F1呢就放过来了啊好,下边呢叫input。Input the STEM reader这个呢,咱们把这个FS呢就放进来,注意这个位置呢,是不是一定要指明是JBK啊。对的啊,那因为呢,你是用GPK编码的,所以这个解码的一定要指明是跟他一样啊,这块我们写一下啊,说这个参数二。呃,这个呢,我们说,呃对应的是叫解码集啊。哎,必须呢与。咱们这个文件的这个编码及一致。哎,一致。哎,这样啊,好,这块呢,一定要小心一点。这张比我放到这个位置吧。这呢,我们只是通过这个后缀啊,文件后缀方式呢,相当于告诉我们它是用的这个JBK了,具体是什么,其实你得看它真的是什么才行啊,光看这个后缀其实不靠谱,只不过我这儿呢是通过他呢能够看出来而已啊。
23:11
好,这呢是我们对于这个输入的这样一个场景了,那下边我们得提供这个输出流啊,输出流的话呢,最终呢,你肯定是要转化成是一个字节流输出的,所以我们就啊,Fell out for the了。这对应的咱们这个叫二。然后这块我们就创建一个叫output stream的一个。那就他啊。Output stream的一个writer啊,然后这里边呢,CTRLP一下,我们呢就可以呢,去填写一个呢叫output stream。哎,那剪影的话呢,就是我们的fos。同时呢,咱们希望呢,洗出去的时候呢,是用的UTF杠八。那这个杠呢,也可以省略啊。哎,就这样。好,这个呢,我们就指明了,得出去。是他。啊,真正我们在这一写啊,这个参数二呢,相当于指明。
24:04
啊,内存中的字符转为文件或者叫存储到是吧。哎,文件中的。嗯,字节,哎,过程中使用的,这叫编码集吧。没问题是吧,哎,内存中这个字符转换到。啊,转换到文件啊。啊中的这个这是这个文件了,中的这个过程当中使用的这个叫编码级字符转字节,好那这块呢,我们针对这个流呢去写出去了。诶,所以这块我们其实呢,哎,包括上边这块处理的其实都是这个字符OK。下边这个具体读写过程呢,我们就得创建字符流。这呢,就是一个字符的这样的一个数组了啊。哎,叉型的,比如就是1024。In的这个L音,哎,它呢,还是记录每次读入到这个数字里边的字符的一个个数了。
25:01
好while l等于注意啊is2.read是吧,到我们这个C8分当中。返回呢,你这个读进去的这个长度不等于负一是吧。好,接着的话呢,我们在OS吧。拿着它是吧,它呢再去write写出去,那是不是还用这个CB。哎,零一下L0一下。这不就写出去了吗?没问题是吧,好,然后呢,这块你可以写一个啊叫哎操作完成。哎,这就结束了,最后呢,关闭资源,从下往上看啊去关,因为呢,我们内层的这个呢,一个是它,一个是它,其实上就不用特意的去关了,主要呢,就关这个和这个。哎,所以呢,就是OS点。哎,Close一下,然后IS2点,哎,Close一下。没问题啊。啊,这写成OS了,这个咱们给大家。改成叫OSW吧。
26:00
OSW这样。嗯,这样也调一下啊。好,这个呢,我们就写完了,还是异常呢,使用TRY开始发来处理,嗯,这块我又。死都死了是吧,哎,这样啊,省点事了,诶这个大家能看到整个我们这样的一个步骤啊,1234。行,咱们做一个运行。哎,操作完成好了,这个完成以后呢,咱们生成了一个这样的一个文件。嗯,叫他了这个文件的话呢,嗯,其实两方面啊,一方面因为呢,它使用UTF8了,所以我这要直接双击呢,其实也能看到是吧。正常看就不会出现乱码,或者的话呢,我们使用这个open in explore。哎,我们在这个磁盘文件中呢,给它打开就在这个文件,这个文件呢,我们这块打开的时候呢,比如我们视图的这块,就叫CS的时候,你也能够看到它使用的就是UTF8。诶没问题,行,诶通过这儿呢,我们就证明出来确实呢,我们把这个JPK格式的文件转化为了一个叫U格式的一个文件。
27:05
行,哎,这呢,就咱们讲的这个转换流的一个使用啊。OK,呃,转换流的话呢,有可能大家后边呢,不一定说一定能用着,但是呢,我们对应的这样的一个编码及解码及编码解码这个过程呢,咱们肯定是要用到的。所以这块呢,肯定是咱们的一个重点啊,在好几个位置咱们都讲过,最早的时候呢,是我们讲这个差的时候。呃,说过这个字节字符的事儿啊,提到过这个字符集的问题,因为当时呢,我们这个小A的话呢,它能够参与运算嘛,那咱们说小A呢,对应的是97了,所以当时呢,就引入了这个叫X码了。OK啊行,这是一个场景,然后后来的话呢,我们是不是又讲这个string的时候。呃,常用类和技术API的时候呢,我们讲这个string string的话呢,它不是跟这个叫字节数组可以转换吗。诶,当初的话呢,我们不是又讲这个字符字节的这个事儿了,诶编码集解码集是吧,诶现在的话呢,我们又在这个位置讲了讲。
28:02
哎,这个呢,大家应该是有一个更深刻的理解啊好,那这块呢,我们把这块呢,再稍微的做一个总结,呃,以前呢,我们讲的时候呢,还有一个小细节呢,没有跟大家提,我们在这儿呢去提一下。啊,首先看一下啊。说呢,在这个存储的这个文件当中。啊,我们这块呢,使用的这个次数机呢,典型的就是这样的几个。存储的文件当中,就是我们把这个数据呢,从内存当中保存到一个具体的物理磁盘的文件了,这个时候呢,我们指定的有相关的这个字符集,就好比呢,咱们刚才在这个位置,大家你随便打开一个文件,然后这块呢,我们去有一个叫CS啊,你会明确的发现呢,它一定会指定这样的一个格式的。OK啊,那这个格式的话呢,其实就是你相应的这个编码,你用的是哪个字符集了啊好,那这块呢,我们说呢,典型的呢,有这样的几个,第一个呢叫X码,第二呢,跟咱们中文相关的啊JBK,还有呢叫UTF杠八。呃,首先呢,来说这个阿克马,它呢,我们说主要。
29:00
哎,是不是用来存储。那咱们说呢,就是这个abcd这样的一些等英文字符是吧。啊呃,还有什么呀。还有这个你比如像这个123,嗯,还有呢,我们这个常用的一些标点是吧。对标点符号。长的标点符号是吧,哎,等。英文是吧。存储ABC,这样咱们应该加个顿号啊。呃,ABC字符和一还有长的号,呃,然后呢,它其实呢,呃整个呢,作用的范围的话呢,为不多你26个,然后呢,我们乘以一个二呢,这个大小写之说嘛,哎,再加上我们这个1230到九这十个,加上一些标点符号,实际上呢,它总共呢,就128个呢就够。啊,128呢,相当于是半个BAT是吧。但是bad已经是我们最小单位了。
30:00
所以呢,你半个那也得用一个艾去存,所以呢,我们这个二次码这块呢,它呢,实际上呢,就是对应的这样的一些字符呢,在我们实际存储文件当中啊,就指每一个字符就占一个字节。哎,每个字符占用。一个字节,所以这呢,也是我们为什么看到呢,在物理磁盘这个文件当中。比如这块呢,我们随便呢,创建一个文件,这里边儿呢,咱们打开我写个ABC,写个123是吧,保存一下这块呢,我们如果呢,看这个文件的大小。诶,这个呢,其实我们使用的不是阿斯马这个字数级了。这个JBK啊,或者UTF8,但是它都向下兼容这个阿码的,所以这里边存的时候呢,其实也是按照X码这个规则来的,写了六个,那这块就是六个字节嘛。啊,这个呢,主要对应过来呢,就是我们说的这个事儿啊。那么这个二次码完了以后呢,在JPK之前呢,其实还有一个啊叫ISO。诶8859杠幺,只不过呢,这个咱们一般接触不到,就跟他也没啥关系。
31:05
他呢,是这个欧洲使用的这个码。啊,你看我们这课件里边呢,我这写着呢啊。哎,这不是X码嘛,是吧,然后这个8ISO8859杠幺,这个呢,也称为呢叫拉丁。啊,拉丁码是欧洲呢,主要用的。OK啊行,然后呢,你比如说咱们。后边呢,会讲这个叫MY是吧。这个MYSQ的时候呢,现在咱们用的都是8.0了,你装这个MYQ8.0时候时候呢,它默认的这个四机呢,其实已经是这个UTF杠八了,但如果你要装的比较早的,比如这个5.7及之前的版本。有同学说呢,这个版本跟这个版本差的有点多呀,这个5.7,这个8.0是吧。注意啊,他俩呢,实际上是挨着的俩版本。就是5.7完了以后呢,没有5.8,直接就是8.0。啊,你有点类似于咱们Java里边呢,JDK呢,我们叫1.41.5的时候呢,直接就要5.0啊是吧。
32:01
诶跟他这个呢类似,就是为了凸显呢,说这个版本呢,是一个非常重量级的版本了,所以直接名称呢,你看有一个很大幅度的一个变化啊,8.0你也可以看到呢,它就相当于是五点八一样。但是没有这样叫,就是8.0,那么在5.7值及之前的时候呢,如果你安装完以后没有指定这个四伏级,它默认的呢,就是这个叫拉丁。为啥呢,因为MY呢是欧洲人,诶公司开发的,所以呢,他就默认的就用这个拉丁了。啊,咱们呢,要想里边写中文呢,是不是还得给大家显示的改一下是吧。OK啊,诶有这样的特点,行,这块了解一下就行,然后这个ISO呢,8859杠幺呢,它其实也向下首先兼容了这个S码,它也是使用一个字节来进行一个编码的。啊,它包括了还有其他的欧洲常见的这样的一些语言的一些字符了,但是呢,这些语言呢,其实都是属于这个叫拼音文字嘛。啊,拼音文的这个特点呢,就是说组合一下就行了是吧,像abcd呢,基本呢,你传一传排列组合是吧,它就构成不同的含义了。
33:01
OK啊,这个呢,就是属于这个拼音文字,跟咱们这个汉字呢,典型的这个象形文字呢,区别比较大了。嗯,OK行,所以这块呢,大家,诶这个呢,就了解一下就行啊。哎,链就行,嗯了解呢,主要点呢,第一个它也涉及到就是每个字符呢,占用一个字节。呃,然后呢,它呢向下兼容,哎,这个X码。OK啊,知道这个事儿就行,是欧洲用的啊,然后对于咱们这个,诶中国人来讲啊,或者我们也不一定非得是中国人了,像这个韩国呀,日本呀,他们其实也有一些这个。汉字是吧。啊,尤其这个韩国现在。好像这个你了解一下的话呢,以前都是用这个汉字比例挺高的,后来呢,韩国要凸显出他们跟中国不一样,就改是吧。啊,改了改完之后呢,发现呢,有好多,好像这个有一词多义吧,现在呢,又又想改回来,反正这个事儿还挺麻烦的啊,总之呢,这个韩国也好,日本也好,包括大家以后。
34:02
去到日本,或者你没去日本,现在有时候看一些。一些图片的时候发现呢,你可能不会念,但是你知道他是卖什么的是吧。啊,就是基本上那个字的意思,跟咱们现在意思一样,发音呢,它给变了。啊,就是它里边呢,也有一些这种汉字,也可以包含在我们这个JBC当中了啊。然后说到这个JBK的话呢,其实它也有一个演进的一个过程啊,比较早的时候呢,叫GB2312。比较早的时候呢,叫GB2312,它呢大概有这么多个汉字。然后后来呢,有一个升级,升级呢就是JBK了,包含的这个汉字呢,你看就显然就多了一些了。啊,它呢,也完全兼容了我们向下的这个GB2312。哎,还包括了这个繁体的这个汉字,包括呢,日韩的一些汉字,诶都包括在里边了啊,然后这块还有一个更高级的叫GB18030。啊,这个呢,收录的汉字呢,你看又又更多了。这儿呢,它是使用多字节来进行编码的。啊,这个一般咱们现在接触的还不多,OK哈,就是到这块呢,已经基本够用了。
35:05
嗯,两万多个是吧。这个大家平时。生活当中其实完全用不了这么多是吧?那生物多呢,应该很小的一部分,汉字呢就也够啊。好,所以呢,平时咱们用的都是这个JK了啊,这个JK的话呢,大家需要记住的它呢,使用双字节的一个编码方案。哎,回过来针对它来讲是吧,它呢,首先我们说呢,用来存储,包括。哎,这个中文是吧,中文呢,又分成这个简体繁体。嗯,还有呢,我们这个abcd这样的一些英文字符和这123啊和长的标点符号。哎,存储包含存储中。来用来存储这个吧。等字符,诶这个呢,首先呢,了解GBK它的一个场景。哎,这是第一个事儿啊,然后另外的话呢,这里边儿我们需要清楚的是这个中文字符。
36:05
哎,是使用两个字节。存储的。啊,那对于我们说像这个ABCD23标点符号啊,还是使用的一个字节。啊,这个呢,理解成了就是向下兼容是吧。哎,这个X码。啊,那就意味着。那这个咱们说的这个事儿是吧。哎,这些这样说吧,英文字符是吧,还有这个123。哎,这样的一些数字啊。哎,还有呢,我们说这个标点符号。标点。哎,符号呢,哎说人。呃,使用。的一个字节啊,注意这块这个标点符号的话呢,它指的是这个英文半角格式下的这个标点符号。啊,你就比如说我们在这里边啊,我打开一下这块呢,你看我这是一个,这算是中文的了啊,中文你要写一个标点符号。
37:05
他这还是相当于是一个字。这,这算几个呀?算两个了是吧。你看ABC这算六个加上这个这个话呢,你得看清楚我们这块呢,使用的这个字数集哈,As是不是JBK吧。好保存一下啊。来回过来,这块我们要打开看一眼。是八个了。对,因为这个呢,你使用的标点是咱们中文格式下的啊,然后我按一下这个shift键,是不是英文格式下这叫半角了哈,这个我整个逗号长这样啊。它呢是占用一个字节的。啊,这个有个区别,所以这块呢,应该是九个了。哎,没问题是吧,好,那相对应的话呢,刚才提到这个事儿,我把他俩就去了啊,比如我们就写上这个叫。在中国是吧,诶保存一下这个呢,就相当于是用JBK一个呢,就占用两个字节了,这就是四个。哎,四个加前面这六个就是十个了。啊,没问题是吧,好这个呢,就是说呢,我们这个叫AJBK了啊好,然后呢,下边这个呢,叫UTF8,或者叫UTF杠八,说我们已经有JBK用了,这不挺好了吗?为什么还要引入一个叫UTF杠八呢。
38:11
啊,因为这块呢,我们这里边呢,只包含这个中文的这个简体繁体啊,台湾这块呢,这不也都包含在里边了是吧,韩国日本的一些汉字呢,也包含在里边了,但是你这块呢,还会有一些比如阿拉伯的一些文字啊。非洲的一些啊是吧,南美洲的一些啊,可能还有很多的国家呢,有一些自己的文字了,那么它就不包含在我们的JBK当中了。那你这个阿码啊,然后呢,SO8859杠幺,我叫拉丁,那显然呢也不,它都是一个自己成像。哎,所以呢,这块我们就需要呢,一个更大的字符集。啊,那这个更大的次数集呢,就提到叫UTF杠八。哎,那除了UTF杠八之外呢,这块还提到UTF-16 UTF-32。杠八的意思呢,就是我们每次呢是八个位的方式进行传输的,杠16呢,就是16个位进行传输。啊,这种方式呢,八个八个传输是使用最广的,所以我们平时呢,用的都说呢UTF杠八。
39:05
OK啊,就这样一个方式啊好,那么这种方式的话呢,他提到是一个变长的一个编码方式。啊,其实这个变长的话呢,这块就提到了,它可以有不同的这个长度,其实咱们J里边的话呢,也可以类似的这样理解,中文的话呢,不就是两个字节是吧,然后你这个涉及到英文的话呢,还是一个字节的啊。好,这块我们回过来UTF杠八呢,首先呢,我们说呢,是可以用来存储啊,世界范围内。啊,主要的语言的啊,所有的字符。所以呢,基本上就都包含到我们这个UTF杠八里边了啊好,那这里边儿呢,我们要重点提到的点呢,就是说诶这个对于。哎,先说这个吧。啊,这个呢,是使用。啊,一到四个。呃,叫不等的这个,哎,字节表示啊,一个字符就是它使用的这个可能不一样了啊,然后下边我们重点关心的就是说这个中文字符使用几个字节来存储。
40:11
对,这是我们说的就是三个字节来存储的,然后呢,也是线下兼容这个S码。啊,这个呢,仍然是不变的。啊,这是就这样个特征,好这个呢,我们说清楚之后呢,是不是类似的回过来,哎,现在的话呢,我们把这个文件啊CS改成了叫UTF杠八了,来保存一下。哎,此时的话呢,就一个呢,占仨了。六个是吧。哎,这不就成12个了吧?诶,保存一下。哎,这样看就成12个字节了。行,这个呢,就是我们说的这样的一个原因啊,因为呢,使用的底层这个字符集呢,是不一样的导致的。好,这呢,就是咱们说的这样的几个字符集,哎,大家呢,得清楚一下。好了,这个要清楚,以后的话呢,我要抛个问题,你看大家会不会啊,什么问题呢。说呢,诶,咱们在当初讲这个数据类型的时候呢,提到了一个叉类型啊,Char类型的话呢,我们明确提到过,说一个差是不是相当于它占用两个字节。
41:10
没问题吧?好,这个差呢,占有两个字节,那怎么这块呢,又说一个差中文字符,这不也是一个字符吗。怎么这块一个中文字符又成了三个自己了?那到底是两个还是三个?而这块儿呢,是两个是怎么解释的问题啊。说一个叉说等于几个字节,假如这个问题就直接这样抛出来了,你怎么解释啊?诶,这个问题咱们前面呢,其实没有讲过是吧?诶我刻意的就避开这个事儿了啊,今天呢,咱们讲这个转让流呢,把这个事儿呢,就彻底的说清楚啊,注意啊,其实呢,我已经蕴含在讲解的过程当中了,咱们说的这些字符集指的是存储的文件当中。就是你存到文件了,我们刚才在这呢,不也明确的,我有说过吗?我们在这块去C的时候呢,是不是在文件这块呢,我们指明你是U是JBK呀,是不是这个意思啊。
42:06
而我们平时说的说一个差等于两个字节,这个呢,注意是在内存当中的。啊,在内存当中一个差。在这写一下啊,一个差,其实呢,就是一个字符吧。啊,这个字符呢,咱们是用这个差呢来表示的。它呢是占用两个字节。那占用的这两个字节,如果我们存到这个具体的啊文件中了,如果你这个字符呢,是一个汉字,你使用的JBK,那就是两个字节,你要使用的U杠八,那就是三个字节,你要是一个英文字符,一个小A呢。哎,不管呢,你是用的GK也好,UTF杠八也好,还是用的前面这俩也好,是不是都只是一个字节呀。但是在内存当中这一个小A哈。还是?一个叉对还是两个字节存的?
43:02
啊,注意一下。在内存当中,一个小A还是两个字节存的。所以呢,你想想咱们当初讲string的时候呢,稍微呢,我提了一下那个JPK9的那个新特性还记得吧。在这列九里边儿呢,对呢,咱们底层的这个差型的数组啊。它是不是就改成叫bit数组了。因为他在内存中存的时候呢,对于呃,美国人啊,或者英国人这个英文语言来讲,他们天天写的代码,他不像咱们前天的减shift键,中英文老切换,他呢,是不是就一路呢,就是英文字符了,是吧?它在内存中去存个小A的时候呢,咱们如果还用差型数组,那一个小A一个叉,是不是就这样去存了,但是你在内存中的时候呢,实际上我们这个小A,比如用90G去存的话呢,其实它就只占这一部分,一个BAT是不是就足够啊。甚至说他一个BAT都用不完哈,但是你不能再拆了,这已经是最小单位了,它其实就意味着像ABC这样的是不是始终会空一半的空间。所以呢,在这个酒的时候呢,为了节省空间的考虑呢,他就改成BAT了。
44:02
哎,通过这儿呢,咱们往前推也反向能证明啊,就是在内存层面的一个字符,不管你是中文也好,英文也好。中文的中啊,它呢,都是用两个字节来存的,在存储的文件当中,我们才会因为字符集的不一样,哎,使用的这个字节就不一样了。啊,这个注意一下,那么在内存中的时候呢,你像我们说这个小A也好,中文的中也好,它是不是也应该对应着一个数啊。你像这个小A,咱们说就是97了是吧,所以说这个二次码,所以这时候咱们说二次码呢,按说呢不太合适的,因为呢,咱们说的呢,其实存储文件的时候才叫二码是吧,那这时候内存中呢,我们一个呃,字符也会对应这个数,这是不是也应该有一个叫字符集的概念。哎,这个字符集啊,通常咱们称为呢,叫做unicode字符集。啊使用占用两个字节说呢,在内存中是吧。啊,内存中啊,我们说使用的这个字符集称为呢。
45:00
哎,对,叫unicode字符集。这个大家还字数几哈,应该还记得咱们在定义这个叉的时候呢,咱们有一种方式不是杠U啊写。是吧,写个数吧,对这个其实我们就相当于是呢,在写这个unicode这个字补集,说白了啊,从数学的概念上来讲,就是一个大的映射嘛。左边的话呢,就是你放的各种各样的字符,你可能有小A啊,可能中文的中还有这个日文等等是吧,然后呢,诶,我按照这种对应关系,这就有个字符集了,右边给你对应的这个数。只不过呢,这个优尼库的这个次数集里边呢,它这个小A的话呢,对应的也是97,跟咱们这个使用的X码这块呢,诶一样是吧。所以呢,我们是一致的,也是有这种兼容的这个场景。那就是说这个UN库的这个次数集呢,相当于呢,我们,哎这个两个字节啊,两个字节呢,应该是多少呀。一个字念的是二的八次方是吧。啊,那就再乘28次方,是不是就二点十六次方。二的十六次方呢,过来呢就是。
46:00
哎,65536。啊,也就说这么多个呢,那基本上就都够存了。啊,就放到这里边儿了啊好,这个呢,我们就是用一个内存中啊,一个字符占两个字节。那么有没有同学会想这个事儿哈,如果呢,一个字符占两个字节,那说明的话呢。呃,基本上世界范围内的这个字符呢,我们都可以用两个字节来表示了。是吧?哎,内存当中呢,这不在内存当中啊,一个字符俩字节,这不就够吗?使用的是这个基本上他把世界范围内的常用的一些字符就都涵盖里边了,所以一方面啊,这个尤尼扣的这个字数集呢,通常就称为呢叫标准的叫万国码。诶,基本上各个国家都涵盖在里边了,那叫万国码啊,哎,这是一个点,另外一个点,会不会有同学会问哈说既然呢,我们一个字符能够用两个字节去存,那为什么我们在存储到文件中的时候呢,还会出现三个的场景。
47:01
你想是有这个问题吧。啊,那这个我们该如何去解释呢?是吧,哎,那这块要解释的话呢,我先说一下这个问题哈,你看JBKJBK的话呢,它这块是用两个字节表示个中文的。然后呢,英文的话呢,还是用一个字节是吧。哎,你说在存储的时候呢,它会不会有什么问题呢?什么问题啊,你比如说咱们在实打实的一个文件当中,我这儿呢是一个字节。这是不是又个字节啊?你说我们要是读啊,我们现在要把这个字节要翻译到我们变成字符了,因为你要打开这个文件要读了,是吧。哎,它是不是会有一定的歧义呀,什么歧义呢,就是你这要是一个呃,Abcd这样的一个字符的话呢,就是一个字节。那就有可能说你这是不是一个abcd,这呢也是个abcd,我给你还原出来。还是说呢,你这两个合在一起是一个中文呢。是不是会有这样的问题啊?啊,那确实JPK呢,也会有这样的问题,那JPK怎么解决呢?它呢这样来处理的啊,比如我这个首字母是零。
48:05
我要是零的话呢,我就表示我这个单独的这一个字节呢,就是一个字符。诶,你就单独还原好,我这还是个零,那你是单独的这一个字节就是一个字符。如果说呢,哎,还是这两个哈,我这儿呢,是一个一开头的。哎,我的意思就是说我这一个字节呢,它不是一个单独的字符了,哎,你得把这两个合一起,哎,我表示的是一个字符,那可能呢,就是我们汉字的一个。中文汉字了是吧。诶,所以呢,它通过这个零和一这样去区分一下,你到底是单独这一个字节表示一个字符,还是说两个字节表示个字符。这是G,那uf这块呢,其实也是同样的,因为这块只有中文的是吧,世界范围一些其他语言没有,那这块呢,这个UN首先在内存层面呢,我们确实啊,基本上各个国家常用的一些字符呢,我们有两个资金呢,都能存下来。但是呢,当你试图用这两个字节去表示一个字符的时候,内存中没问题。
49:03
但是你现在要存储到文件中的时候呢。啊,这个英文字符呢也还好,但是现在呢,汉字的时候呢,我们这块也要往这存,如果你要是用两个字节呢,去存所有的汉字,包括呢,还有其他一些国家的不常见的一些字符的时候,诶同样的问题JBK遇到了,他呢也会遇到。U8也会遇到,他遇到的时候呢,说呃,那要不我也是呃零开头呢,表示一个的呃字节作为一个字符出现,那我要写一的话呢,就认为呢,就是我们两个四级呢,作为一个次符出现。但这时候你零和一,你注意哈,咱们并没有让它用来表示一个具体的字符了,它这时候只是表示呢,你是占用一个还是占用俩的问题了,就会导致呢,咱们刚才说的二点十六次方是不是一下子就少了。一个位置能够去存放数据了。有点像二点十五次方了是吧,这明显不就少了嘛,这一少呢,就导致我们这不够用了。对,因为我们这块字符挺多的哈,你说02:16次方能乘下,你再给我少一半呢,我就用不不够了。
50:03
那就相当于你这块多了一些呢,用用来表示呢,说你要占用几个的这个场景导致呢,我这盛不下了啊,那是不是自然而然的就会考虑出现三个了。哎,就是这样的原因导致的。啊,那自然而然的话呢,如果说你U我们还有一些比较偏的一些字符三个呢,这块也搞不定了,所以它还会出现四个场景。啊,就是这个原因造成的啊好,那这块呢,给大家举个例子,它怎么去设计这个事儿呢?对于咱们中文来讲呢,在UI8当中,咱们用的是三个字节了,三个字节呢,它是这样的一个啊前缀。就是说如果呢,我们去读几层物理磁盘的文件,你发现它开头的是1110,它其实就指明说你后边的三个字节合在一起看作一个字符。啊这样的,然后我这写的叉叉,叉叉呢,就是你实打实的,你这个呃,映射出来的那个数是多少。什么意思,比如说咱们上路的这个上哈。这个上呢,它这个扣的这个值呢,是这个。
51:02
啊,这是内存中的啊,它的16进制呢,长这样二进制呢,长这样这个呢,是咱们说的内存层面的对吧。现在呢,我要把这个数呢,是不是存储到一个文件中啊。这种文件的时候呢,你说诶这不俩字节就够吗?还是咱说的那意思啊,这个你前面呢,因为你都占用了啊,咱们再加一些表示占用几个的时候,几个作为一个整体来读的时候呢,它一占用导致这个数据沉不下了,怎么办呢?所以我们就用这个来去装哈,装的话呢,首先你看头部这个1110这个前缀不要动。后边呢,这空了四个,你就把这块呢,0101放过来。是不是010,后边这幺零,哎,这还是人家这个前缀哈,然后后边有六个,这就1100,是不是就1100,然后0001啊零零。诶注意哈,呃1100,然后这块呢,0001这个零零了。然后零幺这块呢,你注意这块这个幺零还是人家这个幺零哈。可以拿回来,这不是零幺了吗?
52:00
20001吗。OK是吧,然后还剩下这四个幺零,幺零是不是幺零,幺零往这儿放吗。哎,就这样,然后呢,也就是说呢,我们在实际这个磁盘上呢,如果用u ti8去存呢,它就长这样,我们读到这的时候呢,它就看到是1110开头的,后边呢,有些这个前缀呢,都提出来啊,剩下这几个呢,一传就长这样吧。你要是从磁盘上读到内存中,这不还原出来呢,就在内存中还是一个上吗?哎,就这样个过程。这个能理解吧。啊,这个要说完之后呢,彻底的大家应该对于我们这个,诶到底差呢,占几个字节是吧,诶这个应该就彻底清楚了,这块呢,是我们存储的时候呢,用的字符集,而这个话呢,实际上是我们在内存层面的这样的一个概念。OK啊啊,那这呢,一个是你存储到文件中,这个文件呢,从内存的角度来讲,实际上是我们写出去的时候呢,诶放到文件里了,这是一种传输。那你也可以呢,是不存到文件,是不是我就通过网络给他传出去,一样的道理啊。那这时候也需要面对这个字符集的问题,所以呢,诶我们后边呢,讲咱们讲浏览器,讲客户端是吧?诶用户呢,发送数据,比如说你这块呢,写个叫张三,哎,你这个数据呢,在发出来的时候呢,是不是也得考虑这个次数集的问题啊。
53:14
诶,那我们后台这块来接收的时候,必须要跟你发出来这个词数据得一样,然后把这个张三这个数据呢,我们写到数据库里啊。刚才我们提到数据库是不是也有次数集的意思?哎,大家呢,是不是得前前后后字符集都得一样啊。或者叫一致是吧,只要不一致,比如这块张三你来了个JBK了。然后到后台这块用的不是JBK,那这块就是乱码,如果你好,我这块我用的也是JBK行,这没有乱码,但你要写的数据库的时候呢,用的UT8。所以导致呢,我们这块在存的时候呢,就出现乱码了。所以为了不乱码呢,大家全都一致,包括你往回读的时候啊,我从数据库里边把这个数据呢读出来,然后写到这个界面上,哎,比如这边写个欢迎谁谁谁欢迎张三,这个张三呢,就是你从数据库里边读过来的。那这个大家呢,返回的这个数据呢,也得是相同的字数集,那为了体现这种一致性,咱们以后呢,前前后后使用的都是UTF杠八。
54:07
只要呢,出现乱码了,你就知道一定是编码和解码时候使用的字数不一致造成的,哎,就是我们前面也讲过这样的一个事儿。啊,这样的一个问题。好,那这样的话呢,咱们就借着这个转换流呢,把这个事儿呢又说了一下,而这个呢,相对来说呢,是更难和更重要的转换流呢,可能我们不一定会用,但是呢,这里边儿蕴含的这种转换关系啊,大家要清楚。
我来说两句