请教如何解决 JS中接受服务器端传来的JSON数据乱码问题

时间:2022-12-02 08:02:47
JS代码:


 $.get("FlxsAction",null,function(data){
 

 //alert("back");
 //var lmObj = eval("("+data+")");
 var lmObj = data;

 if(lmObj.length!=0){

 for(var i = 0 ; i<lmObj.length ; i++){
alert(lmObj[i]);  //乱码=====================
 $("<option value='"+lmObj[i]+"'>"+lmObj[i]+"</option>").appendTo(flxs);
 } 
 }
 },"json");


服务器端是一个Action(Struts2)


LmListDAO lm = new LmListDAO();
ArrayList<String> lmlist = lm.getLmList();
if(lmlist!=null){
Gson g = new Gson();
String listToJson = g.toJson(lmlist);
System.out.println("-----Gson类型转换------");
System.out.println(listToJson);
out.write(listToJson);//此处控制台输出没有乱码
}


请大家给个建议! 谢谢!

16 个解决方案

#1


response.setCharacterEncoding("UTF-8");
response.getWriter().write(listToJson);

#2


还是不行,为此我做了很多修改: 
1、在JSP页面上设置了js的引入文件编码类型
 <script type="text/javascript" src="../js/admin_news_list_flxs.js" charset="gbk"/>
2、设置了Action中的编码形式
response.setContentType("application/json;charset=UTF-8"); 
response.setCharacterEncoding("UTF-8");
3、设置了JSP页面的
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>

以上设置都没有解决问题,希望知道的朋友告诉一下解决方法!

#3


Gson g = new Gson();
String listToJson = g.toJson(lmlist);
不是很清楚这里的Gson是什么转换策略,你控制台中打印出来的json数据字符串是怎样的呢?

#4


控制台没有乱码产生,输出信息正常
---------------------------------------------------------------------------------------------------
["显示所有栏目信息","农村特色","公告通知","村情介绍","基层党建","政策法规","服务指南","招商引资","新农村建设","村务公开","农业科技","图片新闻","交易平台"]

#5


AJAX解决中英文麻烦。

#6


1.确保out.write(listToJson);是在设置response的编码格式之后调用的。
2.把js和jsp的页面编码也是为utf-8试试,不要既有gb2312也有utf-g
3.看看js和jsp,action那个类的文件的属性,看文件的编码是否为utf-8。
基本应该就这几个点。楼主可以再试试,其他的想到再告诉你。

#7


在JS调用后台方法那里设置:response.setContentType("text/html;charset=utf-8");

#8


      关注    帮顶 !...

#9


在ACTION里加入

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json; charset=GBK");

JSP里的头是:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>


我是这样设置的,没有乱码!!

#10


问题还是没有解决,后台中文编码都没有问题,问题是传回JS里面就产生了乱码!

#11


引用 9 楼 blackglove 的回复:
在ACTION里加入

Java code

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json; charset=GBK");


JSP里的头是:

HTML code
<%@ page language="……

ServletActionContext.getResponse().setContentType("application/json; charset=utf-8");

我也在为这个问题烦恼,加了上面那句就好了,非常感谢,哈哈!

#12


很郁闷,按照常理来说,我列举的以上三种方式可以解决问题了,但是很不幸的是问题依旧没解决,我又写了一个过滤器类,结果依然是乱码,真是悲剧了...
哪位高手能帮忙解决一下啊!

#13


请问楼主,这个问题你解决了吗?

#14


 请问楼主struts2中,在Action里面 out.write(listToJson)能把数据发送到前台吗?

#15


楼主用的gson的jar版本是多少的?我用gson-2.1.jar就乱码,用gson-1.2.3.jar就没有乱码。

没做更多尝试。

#16


把TOMCAT的编码方式改成UTF-8

#1


response.setCharacterEncoding("UTF-8");
response.getWriter().write(listToJson);

#2


还是不行,为此我做了很多修改: 
1、在JSP页面上设置了js的引入文件编码类型
 <script type="text/javascript" src="../js/admin_news_list_flxs.js" charset="gbk"/>
2、设置了Action中的编码形式
response.setContentType("application/json;charset=UTF-8"); 
response.setCharacterEncoding("UTF-8");
3、设置了JSP页面的
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>

以上设置都没有解决问题,希望知道的朋友告诉一下解决方法!

#3


Gson g = new Gson();
String listToJson = g.toJson(lmlist);
不是很清楚这里的Gson是什么转换策略,你控制台中打印出来的json数据字符串是怎样的呢?

#4


控制台没有乱码产生,输出信息正常
---------------------------------------------------------------------------------------------------
["显示所有栏目信息","农村特色","公告通知","村情介绍","基层党建","政策法规","服务指南","招商引资","新农村建设","村务公开","农业科技","图片新闻","交易平台"]

#5


AJAX解决中英文麻烦。

#6


1.确保out.write(listToJson);是在设置response的编码格式之后调用的。
2.把js和jsp的页面编码也是为utf-8试试,不要既有gb2312也有utf-g
3.看看js和jsp,action那个类的文件的属性,看文件的编码是否为utf-8。
基本应该就这几个点。楼主可以再试试,其他的想到再告诉你。

#7


在JS调用后台方法那里设置:response.setContentType("text/html;charset=utf-8");

#8


      关注    帮顶 !...

#9


在ACTION里加入

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json; charset=GBK");

JSP里的头是:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>


我是这样设置的,没有乱码!!

#10


问题还是没有解决,后台中文编码都没有问题,问题是传回JS里面就产生了乱码!

#11


引用 9 楼 blackglove 的回复:
在ACTION里加入

Java code

HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json; charset=GBK");


JSP里的头是:

HTML code
<%@ page language="……

ServletActionContext.getResponse().setContentType("application/json; charset=utf-8");

我也在为这个问题烦恼,加了上面那句就好了,非常感谢,哈哈!

#12


很郁闷,按照常理来说,我列举的以上三种方式可以解决问题了,但是很不幸的是问题依旧没解决,我又写了一个过滤器类,结果依然是乱码,真是悲剧了...
哪位高手能帮忙解决一下啊!

#13


请问楼主,这个问题你解决了吗?

#14


 请问楼主struts2中,在Action里面 out.write(listToJson)能把数据发送到前台吗?

#15


楼主用的gson的jar版本是多少的?我用gson-2.1.jar就乱码,用gson-1.2.3.jar就没有乱码。

没做更多尝试。

#16


把TOMCAT的编码方式改成UTF-8