问题背景:
在http请求的时候,我们在请求头部设置了Content-Type的具体charset值的话,服务端会先按照这个参数来以何种编码格式(utf-8,gbk等)解码,将字节流解码成字符流(网络传输都是以字节流的形式).
同样地,服务器在返回时也会设置Content-Type,里面有编码的格式,如果不设置的话(Content-Type=text/plain就是没有设置编码格式),客户端读取不到Content-Type中的编码格式,就会以本地默认的方式进行解码,从而有可能造成中文乱码的问题.
解决方法:
假设我们知道服务器的编码是utf-8时,而客户端的默认编码是ISO-8859-1(tomcat的默认编码格式),那我们的解决思路是:将已经读取的字符串以ISO-8859-1格式转成字节流,然后将字节流转换成以utf-8编码的字符串,比如:
response = new String(getMethod.getResponseBodyAsString().getBytes("ISO-8859-1"),"utf-8");
总结:中文乱码的出现,主要是由于
编码过程: 字符流-----------------以charset编码格式转成------------>字节流
解码过程: 字节流----------------以charset编码格式转成-------------->字符流
这两个过程的编码格式charset不一致造成的
附: