使用servletContext读取properties文件并response出现的乱码问题

_lyl / 2023-07-21 / 原文

1、response乱码


指服务器响应输出到浏览器,出现乱码。

响应流程

乱码就是A和B的设置有问题。



2、为什么默认设置会导致中文乱码?


idea中创建和打开文件使用的字符集为Unicode,输出时默认的编码方案A为UTF-8

浏览器默认的编码方案B为ISO_8859_1,不支持中文,所以浏览器接收到了UTF-8编码的数据,用ISO_8859_1解码就会出现乱码。



3、解决方案


为了使浏览器正确显示中文,可以

(1)修改浏览器的编码方案B,改成使用UTF-8解码

可以设置http响应报文的请求头,将浏览器的解码方式设置为UTF-8

resp.setContentType("text/html;charset=UTF-8"); //设置编码方案B

(2)AB都需要设置为同一种支持中文的编码方案,比如GBK

resp.setCharacterEncoding("GBK"); //设置编码方案A
resp.setContentType("text/html;charset=GBK"); //设置编码方案B


4、getResourceAsStream()读取乱码

这个问题与servlet关系不大,是关于IO流的知识点。

getResourceAsStream()出现于使用servletContext读取资源的时候,因为getResourceAsStream()返回的是字节流,如果需要读字符,需要将字节流转化成字符流,并指定编码方案,如下图

所以,字符流的传输才会涉及编码、乱码的问题(字节流的传输涉及的是文件格式的问题)



5、最终代码

参考

https://blog.csdn.net/xiazdong/article/details/7217022

https://blog.csdn.net/weixin_44167920/article/details/111357047