json中的数据中文乱码,显示在jsp页面获取json数据中也是乱码,后台不乱码,在ajax中怎样解决乱码?

jsp,ajax,json,servlet前后台传值中文乱码解决方法
JSON前后台传递值,研究了一段时间,下面给出重点代码,主要是解决乱码问题
一、后台向前台传递值
/* 设置格式为text/json
response.setContentType("text/json");
/*设置字符集为'UTF-8'*/
response.setCharacterEncoding("utf-8");
var back=xmlhttp.responseT
var json=eval("("+back+")");//将后台数据转换成json
var name=json[0].
var age=json[0].
二、前台向后台传递值
var uname="张维杰zwj";var pwd="123456";//前台数据
var querystr="username="+uname+"&password="+
querystr=encodeURI(querystr);//一次编码
querystr=encodeURI(querystr);//二次编码
xmlhttp.send(querystr);//向后台传递值
String username = request.getParameter("username");
String password = request.getParameter("password");
username=java.net.URLDecoder.decode(username,"utf-8");//解码
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!博客分类:
在请求发送和接受请求过程中,常常会遇到中文乱码问题,结果在页面中显示乱码问题,在Ajax中如何解决乱码问题呢,可采用如下的两种方式解决:
1、页面的js做两次encodeURI,服务器的的serverlet获取后做一次utf-8转码,因为前两次进行编码后都变成了英文的字节码,所以到服务器端无论如何解码都不会错误,推荐使用该方法。
(1)js的代码
var url = "AJAXServer?name=" + encodeURI(encodeURI($("#userName").val()));
(2)服务器端的代码
//1.取参数
String old = httpServletRequest.getParameter("name");
String name = URLDecoder.decode(old,"UTF-8");
2、在客户端js做一次编码,在服务器端做一次iso-8859-1和utf-8转换。
(1)js的代码
var url = "AJAXServer?name=" + encodeURI($("#userName").val());
(2)服务器端的代码
//1.取参数
String old = httpServletRequest.getParameter("name");
String name = new String(old.getBytes("iso8859-1"),"UTF-8");
这个地方采用了硬编码,同时在个别浏览器中仍出现的问题,不建议使用。
注意:servlet中out出的值中含有中文时,如果不设置编码方式回调函数中获取的数值还是要出乱码的,因此,需要设置编码方法。
response.setContentType("text/charset=utf-8");//设置参数目的是输出字体含有中文时做相应的处理
浏览: 564867 次
来自: 深圳
[flash=200,200][img][url][list] ...
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
spirng 3.1, 配置了不起作用。还是用内spring自 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'jquery json 在jsp页面上显示乱码 - ITeye问答
JSP:
&%@ page language="java" import="java.util.*"& pageEncoding="UTF-8"%&
action:
response.setContentType("text/charset=UTF-8");
System.out.println("json: " + json);
out.write(json.toString());
后台是正常显示的,在JSP页面上汉字就成了乱码
中文不乱码 ,首先采取& post 方式提交吧
&%@ page language="java" contentType="text/ charset=UTF-8" pageEncoding="UTF-8"%&
&script type="text/javascript"
src="js/jquery1.7min.js"&&/script&
&script type="text/javascript"&
type: "POST",
url: "UserInfo",
//data: "name=John&location=Boston",
success: function(msg)
alert(msg);
eval("("+msg+" )");
alert( user.name);
type="button"
value ="AJAX"
onclick="getInfo()" /&
后台servlet :
response.setContentType("text/charset=UTF-8");
PrintWriter
response.getWriter();
json = "{name:'中国'}";
System.out.println("json: " + json);
out.write(json.toString());
out.flush();
out.close();
&servlet-name&UserInfo&/servlet-name&
&servlet-class&hello.UserInfo&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&UserInfo&/servlet-name&
&url-pattern&/UserInfo&/url-pattern&
&/servlet-mapping&
这样做没乱码。
http://wangxuehui.iteye.com/blog/1636773
我自己写的例子,没有乱码,运行成功的
response.setContentType("text/charset=utf-8");&&
response.setCharacterEncoding("utf-8");&&
12.&&& response.setHeader("Charset", "utf-8");&&
13.&&& response.setHeader("Cache-Control", "no-cache");&&
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"/&& ??
请问客户端 如何获取的
已解决问题
未解决问题博客分类:
1.发送路径中的参数有中文,在服务器段接收参数值是乱码
解决办法:前端(客户端)两次编码,后端(服务器)一次解码!
var url="index.jsp?test=来自前台我不是乱码";
url=encodeURI(url);
url=encodeURI(url); //两次编码
XMLHTTP.open ("post",url,true);
String name = arg0.getParameter("test");
name = java.net.URLDecoder.decode(name, "UTF-8");//一次解码
System.out.println("前台传过来的参数:" + name);//输出结果:来自前台我不是乱码
2.返回来的responseText或responseXML的值中含有中文是乱码
解决办法:在后端指定发送数据的格式!
response.setContentType("text/charset=UTF-8"); //这行放在流输出前才好使
PrintWriter out = arg1.getWriter();
String info = "来自后台我不是乱码";
out.println(info);
var backInfo = XMLHttpReq.responseT//后台返回的信息
alert(backInfo);//结果:来自后台我不是乱码
1) Ajax提交数据的格式默认为utf-8,利用javascript的提供的encodeURI()方法两次编码.在服务器端接收的时候要使用java.net.URLDecoder.decode("","UTF-8")方法解码一次.
2) AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,所以服务器要向客户端发送数据的时候,也要采用utf-8编码, response.setContentType("text/charset=UTF-8").
3)如果上述方法仍然解决不了乱码问题,那你尝试一下把jsp,htm,java文件用UTF-8编码格式保存.总之,前后台数据交互都采用utf-8编码就行了.
4.对转码用的一些方法的解释
1)Js方法encodeURI
var uri="my test.asp?name=stale&car=saab";
document.write(encodeURI(uri));
上面的输出如下:
my%20test.asp?name=st%C3%A5le&car=saab
2) Js方法encodeURIComponent
var uri="http://jb51.net/my test.asp?name=stale&car=saab";
document.write(encodeURIComponent(uri));
上面的输出如下:
http%3A%2F%2Fjb51.net%2Fmy%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab
3)java方法
java.net.URLDecoder
public static String decode(String s,String enc) throws UnsupportedEncodingException
使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。给定的编码用于确定任何 "%xy" 格式的连续序列表示的字符。
注:World Wide Web Consortium Recommendation 声明应使用 UTF-8。如果不使用该编码,可能造成不兼容性。
4)java方法
java.net.URLEncoder
public static String encode(String s, String enc) throws UnsupportedEncodingException
使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。该方法使用提供的编码机制获取不安全字符的字节。
注:World Wide Web Consortium Recommendation 声明应使用 UTF-8。如果不使用该编码,可能造成不兼容性。
1.request.setCharacterEncoding("GBK")是设置从request中取得的值或从数据库中取出的值response.setContentType("text/charset=GBK")是设置页面中为中文编码前者是设置动态文字(参数,数据库),后者设置页面静态文字.
2.response.setContentType指定 HTTP 响应的编码,同时指定了浏览器显示的编码,调用此方法,必须在getWriter执行之前或者response被提交之前.
3.response.setCharacterEncoding("GBK")设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用response.setCharacterEncoding指定的编码格式覆盖之前的设置; response.setCharacterEncoding与response.setContentType相同的是,调用此方法,必须在getWriter执行之前或者response被提交之前.
下载次数: 10
浏览: 21950 次
来自: 北京
后台一个filter 就完了
还有种比较变态的问题,仅在ie6下乱码,而且清空缓存后又正常, ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
AJAX传值时采用的是UTF-8编码格式,客户端中文字符传输到服务器端时,如果服务器编码格式或者所采用的MVC框架的编码格式不是UTF-8,则很可能会出现中文乱码。解决办法如下:
客户端用js函数encodeURI()对中文字符进行两次编码,服务器端采用URLDecoder类对客户端传输过来的中文字符进行UTF-8格式的解码。示例:
客户端代码:
type: "post",
url: "createNewGroup.action",
data:"name="+encodeURI(encodeURI("张三")),
success: function(msg){
alert(msg);
服务器端代码:
String name = URLDecoder.decode("客户端传输过来的中文字符","UTF-8");
服务器端往客户端传输中文字符出现乱码时,服务器端可采用URLEncoder类对中文字符进行UTF-8格式的编码。客户端采用js函数decodeURI()对服务器端传输过的中文字符进行两次解码。
当服务器端传输的是一个json串时,且不可对整个json串进行UTF-8格式的编码(编码后的json串有可能不再具有json原有格式),可采用JsonValueProcessor接口和JsonConfig类对json串中的value进行单独编码。
示例代码:
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(String.class,
new JsonValueProcessor(){
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
* @param value
public Object process(Object value) {
if (value instanceof String) {
URLEncoder.encode(value.toString(), "UTF-8");
return value == null ? "" : value.toString();
} catch (Exception e) {
return "";
JSONArray json = JSONArray.fromObject("[{name:\"张三\";age:\12\";sex:\"男\"}]",
jsonConfig
); //编码后的json串
客户端使用函数decodeURI()再对json串中的value值进行两次解码即可。
nirvana1988
浏览: 110694 次
来自: 郑州
必须给你点赞,很好的解决了我的问题!
测试发现:不支持 Safari、Chrome(既不支持“win ...
如果传的字符串的格式是这样的就会有问题:String str
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 页面json数据乱码 的文章

 

随机推荐