java如何使用iso-8859-1编码进行编码的转换

在进行开发中,有时候可能需要对get请求中进行URL编码,但编码往往乱码,
使用中可以使用request的setCharacterEncoding()进行解码,
其实我们往往不知道他到底是如何编码的,

而有时候需要使用httpclient进行请求数据,往往把中文进行编码来更好地适应一些规范,防止兼容性问题,
一般,我们在请求url时一般也会自动编码为iso-8859-1,其实,这个情况,我们可以自己模拟一样,
进行一下字符的编码转换测试,其实这也是自己突然心血来潮,想研究一下,所以也分享出来,有错误的地方,希望大家指正。

看以下图片:
java如何使用iso-8859-1编码进行编码的转换_第1张图片
会发现转换出来的字符还是一样的,
java如何使用iso-8859-1编码进行编码的转换_第2张图片
会发现转换的结果是一样的,
这也侧面说明一个问题,字符定义过后,这个字符也就是你定义的,即所见即所得。
例如定义 str 为“中国”,那你打印出来就是中国,你利用str.getBytes(“gbk”),也就是获取的中国这两个字的gbk编码的数组字节,然后再用‘gbk编码来创建字符对象,数组是按照gbk编码来获取的,用gbk编码来生成字符串,而且,gbk编码中包含“中国”这两个汉字,所以一切正常。
但是,用gbk编码获取“中国”的字节数组,用iso-8859-1来创建字符的话呢?
java如何使用iso-8859-1编码进行编码的转换_第3张图片
如图是用gbk来获取字节数组的,用iso-8859-1来创建字符对象,
看结果:
java如何使用iso-8859-1编码进行编码的转换_第4张图片
可以看到,结果乱码了。。。
那么,使用iso-8859-1来获取字节数组,再用iso-8859-1来创建字符不行吗?
java如何使用iso-8859-1编码进行编码的转换_第5张图片
结果:
java如何使用iso-8859-1编码进行编码的转换_第6张图片
显然,出现了??,也乱码了,
细心的人会发现,上面的没有出现??,而下面的却出现了,
原因呢?
因为第一次使用gbk获取的字节数组,字节数组用iso-8859-1来创建字符,可能出现的就是对应的编码位不同,所以会出现不同的字符。而第二次使用iso-8859-1来获取的字符的字节数组,那么,在iso-8859-1里压根就没有汉字,所以,获取数组根本就没有对应的,应该是默认值,在转换中,String内部给转换成了?的字节,所以就看到了??这样的效果,而汉字在gbk编码中有对应的,所以能获取到对应的字节,但是它和iso-8859-1的编号不对应,所以导致出现的字符不同。
那么,如何对utf-8的字符转换为iso-8859-1,然后在网络传输后,如何转换呢?
java如何使用iso-8859-1编码进行编码的转换_第7张图片
结果:
java如何使用iso-8859-1编码进行编码的转换_第8张图片
可以看到,用utf-8获取数组之后,再用iso-8859-1创建字符,会乱码,
别担心,我们只不过用它做一下中转而已,
后来我们使用该字符获取了它的iso-8859-1的字节数组,从而保证了它的原番还原,
为什么,因为它创建时使用iso-8859-1,恢复为字节数组时也用这个iso-8859-1编码,就能保证它恢复的数组和之前获取的数组是一致的,但是,这个字节数组却是“中国人”的utf-8的字节数组,所以再用来恢复,就能还原回来。当然,你要转换为其他编码,可以直接把utf-8改为你想要的格式,一定要注意,编码的对应。

本文仅对于小白来说,或许有些帮助,可能我的表达能力不好,深感抱歉。如有不足,还望大家指出。

你可能感兴趣的:(我的文章)