java response 远程 乱码_java-response-乱码解决

(1)响应体设置文本

获得字符流,通过字符流的(Strings)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览   器端。

关于设置中文的乱码问题

原因:response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过      response的(Stringcharset)设置response的编码

但我们发现客户端还是不能正常显示文字

原因:我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系     统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以     手动修改浏览器的编码是UTF-8。

我们还可以在代码中指定浏览器解析页面的编码方式,

通过response的(Stringtype)方法指定页面解析时的编码是UTF-8

response.setContentType("text/html;charset=UTF-8");

上面的代码不仅可以指定浏览器解析页面时的编码,同时也内含            setCharacterEncoding的功能,所以在实际开发中只要编写      response.setContentType("text/html;charset=UTF-8");就可以解决页面输出中文乱码问题。

request.setCharacterEncoding("UTF-8");//将获取的内容以UTF-8显示----POST方式提交

request.setCharacterEncoding("UTF-8");//将获取的内容以UTF-8显示 POST方式提交//1、获得请求方式

String method =request.getMethod();//2、获得请求的资源相关内容

String URI =request.getRequestURI();

StringBuffer URL=request.getRequestURL();

String query=request.getQueryString();

String HEADER= request.getHeader("User-Agent");//取指定头名称

String username = request.getParameter("username");//指定请求体

//如果是get方式提交,需要先将提交内容进行"iso8859-1"编码,再使用"UTF-8"解码(大写)下图   当然一般现实中很少用get提交表单

username = new String(username.getBytes("iso8859-1"), "UTF-8");

String password = request.getParameter("password");

System.out.println(username+ "...." +password);

response.setContentType("text/html;charset=UTF-8");//将响应的内容以UTF-8发送

response.getWriter().write(username + "...." + password + "...." + method + "...." + URI + "...." + URL + ".."

+ query + ".." + HEADER);

GET方式提交原理如下图

68f724bad5a33d9a9f6bd2ca7369ecb7.png

339666f2ae16b3788b66febcf93d72d2.png

tomcat默认全部都是用ISO-8859-1编码,不管你页面用什么显示,Tomcat最终还是会替你将所有字符转做ISO-8859-1.那么,当在另目标页面再用GBK翻译时就会将本来错的编码翻译成GBK的编码,这时的文字会乱码.

所以需要先将得到"字符"(不管是什么)都先用字节数组表示,且使用ISO-8859-1进行翻译,得到一个在ISO-8859-1编码环境下的字节数组.例如:AB表示成[64,65].然后再用GBK编码这个数组,并翻译成一个字符串.

那么我们可以得到一个编码转换的过程

假设:GBK码("你")->URLencode后变成->(%3F%2F)->Tomcat自动替你转一次ISO-8859-1->得到( 23 43 68 23 42 68 每一个符号表示为ISO-8859-1中的一个编码)->接收页面--->再转一次为ISO-8859-1的Byte数组[23,43,68,23,42,68]--->用GBK再转为可读的文字--->(%3F%2F"---->转为("你")

//也可以Tomcat里server.XML设置字符集直接指定

fc1a36dd83e8da771628bb0bfb5ea047.png

0f0c4889e4008385a0f7c382e23ff788.png

cfee0c0d49f80da63e35d345faa8a813.png

3.相关知识延伸阅读

3.1)在URL中中文字符通常出现在以下两个地方:

http://localhost:8080/example/中 国 name=中国

(1)Query String中的参数值,比如 keywords=中国

(2)servlet path,比如: /中 国

3.2)出现乱码问题的原因主要是以下几方面:

(1)浏览器:我们的客户端(浏览器)本身并没有遵循URI编码的规范。

(2)Servlet服务器:Servlet服务器的没有正确配置。

3.3)相关知识:http请求的几个环节

浏览器(ie firefox)—————–>Servlet服务器 ——————–>浏览器显示

< 解码成unicode,然后将显示的内容编码>

(1)浏览器把URL(以及post提交的内容)经过编码后发送给服务器。

(2)这里的Servlet服务器实际上指的是由Servlet服务器提供的servlet实现ServletRequestWrapper,

不同应用服务器的 servlet实现不同,这些servlet的实现把这些内容解码转换为unicode,

处理完毕后,然后再把结果(即网页)编码返回给浏览器。

(3)浏览器按照指定的编码显示该网页。

注意:

当对字符串进行编码和解码的时候都涉及到字符集,通常使用的字符集为ISO8859-1、GBK、UTF-8、UNICODE。

3.4)相关知识:URL的组成及说明

域名:端口/contextPath/servletPath/pathInfo queryString

(1)contextPath是在Servlet服务器的配置文件中指定的

(a)对于weblogic:contextPath是在应用 的weblogic.xml中配置。

具体参考:https://blog.csdn.net/zhou_pp/article/details/83545602

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值