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 后台传递中文信息时,没有设置编码格式

      response.setContentType("text/html;");
PrintWriter out = response.getWriter();
out.println("<form action='/MessyCode/FormRecevie' method='post' >");
out.println("用户名:<input type='text' name='username' > <br/>");
out.println("<input type='submit' value='提交' > <br/>");
out.println("</form>");

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

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

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

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

  

  发送页面

         response.setContentType("text/html;charset=utf-8");         PrintWriter out = response.getWriter();
out.println("<form action='/MessyCode/FormRecevie' method='post' >");
out.println("用户名:<input type='text' name='username' > <br/>");
out.println("<input type='submit' value='提交' > <br/>");
out.println("</form>");

  

  接收页面

         response.setContentType("text/html");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
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 对象设置编码

      response.setContentType("text/html;utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter(); String name = request.getParameter("name");
System.out.println(name);
out.println(name+"</br>");

② 发送页面有两种情况,一种是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()方法

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

      //包含中文信息的参数进行编码
String username = URLEncoder.encode("流氓3","UTF-8");
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 对象都进行编码设置

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

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

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

5 Http请求中文乱码处理的更多相关文章

  1. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  2. Spring-解决请求中文乱码问题

    解决spring请求中文乱码问题 1.web.xml添加编码拦截器 <filter> <filter-name>CharacterEncoding</filter-nam ...

  3. 使用httpclient post请求中文乱码解决办法

    使用httpclient post请求中文乱码解决办法   在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码 ...

  4. get请求与post请求中文乱码问题的解决办法

    首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解 ...

  5. 解决Post请求中文乱码问题

    解决Post请求中文乱码问题 req.setChracterEncoding()要在获取请求参数前调用才有效,不然还是乱码

  6. get请求中文乱码及get,post编码探究

    在我使用get请求进行查询的时候遇到一个问题: 当我的请求参数中有中文时,出现乱码. 可是即使我设置了Spring的characterEncodingFilter,也还是出现乱码. 原因:tomcat ...

  7. android客户端向服务器发送请求中文乱码的问

    android客户端向服务器发送请求的时候,并将参数保存到数据库时遇到了中文乱码的问题: 解决方法: url = "http://xxxx.com/Orders/saveorder.html ...

  8. SpringMVC如何解决POST请求中文乱码问题,GET的又如何处理呢?

    在web.xml中 <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-c ...

  9. Java中关于Servlet中请求中文乱码及文件下载

    1,Servlet请求响应中文乱码问题 package com.demo.servlet; import java.io.PrintWriter; import java.io.IOException ...

随机推荐

  1. element ui Angular学习笔记(一)

    1.element ui安装 npm i --save element-angular 2.Angular-cli引入 引入后需要开启ElModule.forRoot(),也可以单独引入某个组件入El ...

  2. 利用nginx搭建小型的文件服务器

    PS内的文件如果需要共享给其他计算机下载,可以选择ftp的方式,优点是操作性很高,修改删除下载等等都可以,但是速度略慢. 如果仅仅是将VPS作为文件中转站,可以尝试用Nginx架设一个简单的文件服务器 ...

  3. SQLAlchemy 嵌套事务的解决方案

    sqlachemy 是python的orm框架,在使用一段时间后,我们通常会出现事务嵌套的情况,看到很多人写代码的时候,居然是session到处传递,这无疑是加大了代码之间的耦合度. 案例: def ...

  4. 7.01-beautiful_soup2

    # pip install beautifulsoup4 from bs4 import BeautifulSoup html_doc = """ <html> ...

  5. PHP删除数组中空值的方法介绍

    这篇文章主要介绍了PHP删除数组中空值的方法介绍,需要的朋友可以参考下 说来惭愧,以前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码如下: ...

  6. leetcode 74. Search a 2D Matrix 、240. Search a 2D Matrix II

    74. Search a 2D Matrix 整个二维数组是有序排列的,可以把这个想象成一个有序的一维数组,然后用二分找中间值就好了. 这个时候需要将全部的长度转换为相应的坐标,/col获得x坐标,% ...

  7. 浅谈SQL注入

    先看一个sql语句: select * from admin where username='(此处为用户输入的数据)'; 在没有任何过滤的情况下,如果用户输入:' or 1=1 -- 这条语句就为: ...

  8. MySQL笔记--注意

    replace into 和 insert into..... on duplicate key update的异同 同:1. 当key不存在时,两者相同,都是插入一条数据2. key存在时,执行两者 ...

  9. Feature Extractor[ResNet]

    0. 背景 众所周知,深度学习,要的就是深度,VGG主要的工作贡献就是基于小卷积核的基础上,去探寻网络深度对结果的影响.而何恺明大神等人发现,不是随着网络深度增加,效果就好的,他们发现了一个违背直觉的 ...

  10. 【C#复习总结】析构函数

    上篇提到析构函数,就顺便复习一下. 一 C# 析构函数 1.1 析构函数的定义 析构函数用于释放被占用的系统资源. 析构函数的名字由符号“-”加类名组成. 1.2 析构函数注意的问题 使用析构函数时, ...