博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5 Http请求中文乱码处理
阅读量:5137 次
发布时间:2019-06-13

本文共 3196 字,大约阅读时间需要 10 分钟。

 

java 乱码分很多种,这里主要研究解决http请求中出现乱码的情况。

http请求出现中文乱码的主要原因:发送方与接收方编码不一致服务器默认支持的编码与web应用不一致,如:tomcat 是国外程序员开发的,页面默认编码为ISO-8859-1,而我们很多中文浏览器默认的编码为:UTF-8,如果不作处理,从浏览器发送中文数据发送给web应用就会出现乱码。

http请求出现中文乱码的主要情况:

1 页面带中文的标签都显示乱码

2 表单提交(form):post与get

3 超链接:<a href=”http://cnblogs.com?name=流氓”>

4 SendRedirect() 发生乱码

5 getRequestDispatcher("url").forward(request, response)

 

1 页面带中文的标签都显示乱码

Servlet 后台传递中文信息时,没有设置编码格式

1      response.setContentType("text/html;");3         PrintWriter out = response.getWriter();4         out.println("
");5 out.println("用户名:
");6 out.println("
");7 out.println("
");

  在第1行设置一下reponse对象的编码格式可解决该问题,修改代码如下:

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

 

  2 表单提交(form):post与get

  ① post 提交之后,接受页面出现乱码

  

  发送页面

1         response.setContentType("text/html;charset=utf-8");3         PrintWriter out = response.getWriter();4         out.println("
");5 out.println("用户名:
");6 out.println("
");7 out.println("
");

  

  接收页面

1         response.setContentType("text/html");2         PrintWriter out = response.getWriter();3         String username = request.getParameter("username");4         out.println(username);

 

 解决方案:在获取传递的参数前,要设置request与response 对象的编码格式

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

request.setCharacterEncoding("utf-8");

 

② get 提交之后出现乱码

get 方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到乱码,要解决这个问题,需要拿着乱码反向查ISO8859-1,拿到数据后,再去查正确码表。

String username = new String((request.getParameter("username")).getBytes("iso8859-1"),"utf-8");

 

3 超链接

① 接收页面给request 与 response 对象设置编码

1      response.setContentType("text/html;utf-8");2         request.setCharacterEncoding("utf-8");3         PrintWriter out = response.getWriter();4         5         String name = request.getParameter("name");6         System.out.println(name);7         out.println(name+"
");

② 发送页面有两种情况,一种是html 与jsp 页面超链接,一种是Servlet的超链接

html 与jsp 页面超链接必须在页面设置编码格式为:UTF-8,否则接收页面不管怎么处理都会出现乱码

jsp 页面设置:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

html 页面设置:

<meta http-equiv="content-type" content="text/html;charset=utf-8">

Servlet超链接在发送页面设置response对象编码:

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

 

4 SendRedirect()方法

发送页面对发送的中文进行编码

1      //包含中文信息的参数进行编码2         String username = URLEncoder.encode("流氓3","UTF-8");3         response.sendRedirect("/MessyCode/RedirectReceive?username="+username);

 

接收页面需要设置reponse的编码格式,然后直接调用即可

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

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

   

  5 getRequestDispatcher("url?parameter="+"参数").forward(request, response)

  发送页面需要对response 与request 对象都进行编码设置

1         response.setContentType("text/html;charset=utf-8");2         request.setCharacterEncoding("utf-8");3         PrintWriter out = response.getWriter();4         //包含中文信息的参数进行编码5         String username = "流氓3";6         request.getRequestDispatcher("/DispatcherReceive?username="+username).forward(request, response);

  接收页面直接访问即可,无需处理

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

 

转载于:https://www.cnblogs.com/Latiny/p/8400118.html

你可能感兴趣的文章
设计模式之结构型模式
查看>>
jQuery EasyUI 的下拉选择combobox后台动态赋值
查看>>
timeline时间轴进度“群英荟萃”
查看>>
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>