web服务器的Content-Type为text/plain时返回出现中文乱码问题解决

时间:2022-05-09 11:52:53


问题背景:

         在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不一致造成的



附:

web服务器的Content-Type为text/plain时返回出现中文乱码问题解决 web服务器的Content-Type为text/plain时返回出现中文乱码问题解决