form提交数据中文乱码问题总结
一:form在前台以post方式提交数据:
浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。
package com.yyz.request; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//以post方式提交表单
public class RequestDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求数据的中文乱码问题
request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8
String username = request.getParameter("username");
//获取数据正常,输出数据时可以查阅不同码表
response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表
response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开
PrintWriter out = response.getWriter();
out.write(username);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
二:form在前台以get方式提交数据:
get方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。
package com.yyz.request; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//以get方式提交表单
public class RequestDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求数据的中文乱码问题
request.setCharacterEncoding("UTF-8");//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1
String username = request.getParameter("username");
System.out.println(username);
byte source [] = username.getBytes("iso8859-1");
username = new String (source,"UTF-8");
System.out.println(username); } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
三:提交数据中文乱码问题总结:
1.如果提交方式为post,想不乱码,只需要设置request对象的编码即可。
注意:客户机数据是以哪种方式提交的,request就应该设成什么编码。
2.如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。
String data = "???????";//乱码字符串
byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据
data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码
//等同于
data = new String (source,"UTF-8");
3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。
3.1
这种方式并不推荐,因为更改了服务器且并不灵活。
3.2
这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。
四:最后的最后,提一个小细节:URL地址后面如果跟了中文数据,一定要经过URL编码。表单提交的参数有中文数据,浏览器会自动帮我们编码,但如果是通过链接直接带中文参数,浏览器是不会帮我们编码的,这时想通过上述第二种方式解决中文乱码问题就时灵时不灵了,应该通过URLEncoding.encode(,"UTF-8")先编码。
form提交数据中文乱码问题总结的更多相关文章
- struts2 action获取ajax提交数据中文乱码问题
有个人和我问题相同,地址在这: 解决方法: 在ajax的属性添加这句:contentType:'application/x-www-form-urlencoded; charset=utf-8',
- Tomcat JSP提交参数中文乱码问题解决
参考: http://blog.csdn.net/error_case/article/details/8250209 中文乱码是个老生常谈的问题,一般情况下,只要保证页面,web服务器,数据库的编码 ...
- controller接收前台数据—中文乱码问题
项目用的开发环境为tomcat+eclipse+SSM 正如题目,controller接收前台数据-中文乱码问题,在页面编码为UTF-8的前提下,解决方案有二: 一) controller接收数据时, ...
- Spring MVC3返回JSON数据中文乱码问题解决(转)
Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jack ...
- 2016 系统设计第一期 (档案一)jQuery ajax serialize()方法form提交数据
jQuery ajax serialize()方法form提交数据,有个很奇怪的问题,好像不能取到隐藏控件的值. //点击提交按钮保存数据 $('#btn_submitUser').click(fun ...
- PLSQL插入数据中文乱码的问题
PLSQL插入数据中文乱码的问题 中文乱码就是编码不统一所导致的了,解决办法只需要把编码统一下即可解决了. 具体操作步骤如下: 1.查看服务器端编码 select userenv('language' ...
- [转]mysql导入导出数据中文乱码解决方法小结
本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 ...
- SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题
一.SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 linux 设置系统语言 修改 /etc/sysconfig/i18n 文件,如 LANG="en_ ...
- 解决get方法提交参数中文乱码问题:
解决get方法提交参数中文乱码问题: 1找到你们的tomcat的目录 2在这个目录下面\tomcat61-32\tomcat61\conf 3找到server.xml ,用notepad打开(没有就下 ...
随机推荐
- 山东理工大学ACM平台题答案关于C语言 1580 闰年
闰年 Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^ 题目描述 时间过得真快啊,又要过年了,同时,我们的人生也增长了一年的阅历,又成熟了一些 ...
- Angularjs 初始化框架
bindJQuery(); publishExternalAPI(angular); jqLite(document).ready(function() { angularInit(document, ...
- 小谈chrome调试命令:console.log的使用
相信从事前端开发的您,一定不会陌生Mozilla五星级推荐的一款插件:firebug,它是如此强大,乃至于我们可以很方便地调试DHTML的近乎所有元素.而在它深邃的机体里,还存有一个命令:consol ...
- linux 查看当前路径命令:pwd
查看当前路径命令:pwd pwd命令能够显示当前所处的路径. 这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为: # pwd /home/samlee ...
- 读取AD模拟分量
//EEPROM数据保存---------------------- #include <EEPROM.h> #define EEPROM_write(address, p) {int i ...
- c# 路径空格---ProcessStartInfo参数问题
今天在整合程序的时候,要从一个程序转到另一个程序 当然要使用: ProcessStartInfo startInfo = new ProcessStartInfo("\\Program ...
- codeforces 468B 2-sat
今天明确了2-SAT; 表示对一对整数之间的关系是否存在 #include<cstdio> #include<algorithm> #include<iostream&g ...
- Lua学习教程之 可变參数数据打包与解包
利用table的pack与unpack进行数据打包与解包.測试代码例如以下: print("Test table.pack()----------------"); functio ...
- mydumper原理5
前言 之前介绍了Oracle官方的多线程逻辑导入导出工具mysqlpump,但已经操作过的同学会发现其多线程的单位还是表,换句话说, 单表依然是 单线程导出 .网易早已使用mydumper/myloa ...
- form表单中method的get和post区别
一.问题的提出 <form action="getPostServlet/getPost.do?param4=param4" method="get" ...