背景

作为非西欧语系的国家,总是要处理编码问题


使用java编码解码

    @Test
public void coderTest() throws UnsupportedEncodingException {
String str = URLEncoder.encode("中国人民", "GBK");
System.out.println(str); str = URLDecoder.decode(str, "UTF-8");
System.out.println(str); str = URLEncoder.encode(str, "ISO-8859-1");
System.out.println(str); str = URLDecoder.decode(str, "BIG5");
System.out.println(str); }

浏览器端

html页面可以设置字符集,比如:Content-Type:text/html;charset=UTF-8。
设置后的作用:
1、Get/Post方法提交参数会使用这个设置。
2、网页文字展示也会使用这个设置,比如把它修改为ISO-8859-1,网页中的非ASCII字符都会显示乱码。


服务器端

通过request.setCharacterEncoding()可以设置解析参数时使用的字符集(response也有这个方法)。


默认设置

容器和大部分浏览器默认编码处理都使用的是ISO-8859-1。


乱码原因

浏览器和服务器双方使用不同的编码设置,就会产生乱码。


解决方案

方案一、设置http服务器解析URL的编码方式

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form method="get" action="world">
名称:<input type="text" name="name"><br>
<button>发出 GET 请求</button>
</form><br><br>
<form method="post" action="world">
名称:<input type="text" name="name"><br>
<button>发出 POST 请求</button>
</form>
</body>
</html>

Html Code

      <plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/hello</path>
<port>8090</port>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>

Pom  Code

package com.test;

import org.junit.Test;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder; @WebServlet("/world")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
System.out.println("name: " + name); // name: 中国人民
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
System.out.println("name: " + name); // name: 中国人民
}
}

Java Code

  关键配置是: <uriEncoding>UTF-8</uriEncoding>

  这种方式只对get请求有效。因为它设置的只是http服务器解析url时要使用UTF-8。url解析是http服务器解析的,Tomcat里自带一个http服务器。

方案二、通过String的getBytes()指定编码来取得该字符串的字节数组,然后再重新构造为正确编码的字符串。

  例如,若浏览器使用UTF-8处理字符,Web容器默认使用ISO-8859-1编码,则正确处理编码的方式为:

    String name = request.getParameter(name);
    name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

  这种方法对get/post请求都有效

方案三、使用HttpServletRequest的setCharacterEncoding()方法指定解析请求参数时使用的编码。

  例如,若浏览器以UTF-8来发送请求,则接收时也要使用UTF-8编码字符串,则可以在取得任何请求值之“前”,执行语句:

  request.setCharacterEncoding("UTF-8");

  只适用于post请求;究其原因,是因为处理URL的是HTTP服务器,而非Web容器,如果使用get方法,HTTP服务器已经提前一步使用ISO-8859-1解析了url上的参数了,已经乱码了,所以再设置也没有作用了。

web 应用请求乱码问题的更多相关文章

  1. Java Web乱码分析及解决方式(一)——GET请求乱码

    引言:     在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...

  2. web请求乱码问题总结

    问题1:springmvc通过@ResponseBody向页面返回值(包括汉字)时,乱码 解决方案: springmvc3.2之后可以声明注解驱动器(不知道是不是这么翻译)的时候的控制编码的转换,结果 ...

  3. Java Web乱码分析及解决方式(二)——POST请求乱码

    引言 GET请求的本质表现是将请求參数放在URL地址栏中.form表单的Method为GET的情况.參数会被浏览器默认编码,所以乱码处理方案是一样的. 对于POST请求乱码.解决起来要比GET简单.我 ...

  4. 1.JAVA WEB 笔记中文乱码

    JAVA WEB 乱码问题解析 乱码原因 在Java Web开发过程中,经常遇到乱码的问题,造成乱码的原因,概括起来就是对字符编码和解码的方式不匹配. 既然乱码的原因是字符编码与解码的方式不匹配,那么 ...

  5. SpringMVC(一)--基础、REST、@RequestParam、POST请求乱码等

    1.SpringMVC基本概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 ...

  6. form表单post请求乱码问题

    今天做一个查询的小模块遇到了 请求乱码的问题,表单请求方式是post 解决方法是在web.xml 文件中配置一下内容 <!--配置解决post乱码问题filter --> <filt ...

  7. Get请求,Post请求乱码问题解决方案

    下面以两种常见的请求方式为例讲解乱码问题的解决方法. 1.Post方式请求乱码. 自从Tomcat5.x以来,Get方式和Post方式提交的请求,tomcat会采用不同的方式来处理编码. 对于Post ...

  8. 如何解决WEB应用中文乱码问题

    最容易出现乱码的场景是浏览器向服务器发送请求的过程,解决的策略就是强制为请求和响应设置编码格式. 一.POST 方式请求乱码 1. 在每个 Controller 中单独处理 request.setCh ...

  9. POST请求转换为PUT或者Delete请求、处理post请求乱码的过滤器、Get请求乱码

    在web.xml中配置 <!--配置HiddenHttpMethodFilter : 将所有的POST请求转换为PUT或者Delete请求 --><filter> <fi ...

随机推荐

  1. 剑指offer二十四之二叉树中和为某一值的路径

    一.题目 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 二.思路 详见代码 三.代码 1.解答代码 im ...

  2. Hadoop简介与伪分布式搭建—DAY01

    一.  Hadoop的一些相关概念及思想 1.hadoop的核心组成: (1)hdfs分布式文件系统 (2)mapreduce 分布式批处理运算框架 (3)yarn 分布式资源调度系统 2.hadoo ...

  3. RabbitMQ初学之二:直接发送消息到队列

    一. 背景 总前提:队列无论是在生产者声明还是在消费者声明,只有声明了,才能在RabbitMQ的管理界面看到该队列 生产者直接发送消息到队列,消费者直接消费队列中的消息,而不用指定exchange并绑 ...

  4. 【数组】Maximum Product Subarray

    题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...

  5. Major GC和Full GC的区别是什么?触发条件呢?

    作者:RednaxelaFX链接:http://www.zhihu.com/question/41922036/answer/93079526来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...

  6. [经典]网关,DNS,DHCP三者关系详解

    什么叫网关的精解 Sample Text转自(协议分析论坛)计算机主机网关的作用是什么?假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的 ...

  7. Tornado简介

    Tornado是一个具有强大异步功能的Python Web框架. Hello World 使用pip安装tornado: pip install tornado 编写控制器: import torna ...

  8. 从数据库表中随机获取N条记录的SQL语句

    Oracle: select * from (select * from tableName order by dbms_random.value) where rownum < N MS SQ ...

  9. 使用 ahk 让普通键盘变为Dvorak键盘

    本文告诉大家,如何使用软件做出Dvorak键盘. 在开始说如何做之前,需要告诉大家,什么是Dvorak键盘. Dvorak Simplified Keyboard /ˈdvɔːræk, dəˈvɔː- ...

  10. Html dom 赋值

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...