我在java用RequestDispatcher类把result变量forward到JSP,如下代码:
request.setAttribute("data", result);
RequestDispatcher rd = this.getServletContext().getRequestDispatcher(forwardURL);
rd.forward(request, response); 在jsp接受result变量,用json-taglib去解析:
<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="json" uri="/WEB-INF/json.tld" %>
<%@ taglib prefix="c" uri="/WEB-INF/jstl-c.tld" %>
<%@ taglib prefix="fn" uri="/WEB-INF/jstl-fn.tld" %>
<%@ taglib prefix="fmt" uri="/WEB-INF/jstl-fmt.tld" %>
<%@ taglib prefix="x" uri="/WEB-INF/jstl-xml.tld" %>
<%
response.setHeader("Access-Control-Allow-Credentials","true"); 
response.setHeader("Access-Control-Allow-Origin", "*");
if(request.getAttribute("format").equals("json")){
response.setContentType("text/plain");
} else if(request.getAttribute("format").equals("xml")){
response.setContentType("text/xml");
out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
}
%>
<json:object prettyPrint="true" escapeXml="false" transformXml="${transformXml}" >
<c:choose>
  <c:when test="${!empty data}">
  <json:property name="cp_error_message" value="${data.error_msg}" />
</c:when>
</c:choose>
</json:object>此时,data.error_msg接续出来的值为"cp_error_message": "\u670d\u52a1\u5668\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5";
在java中看到的对应的中文为:"服务器繁忙,请稍后再试";请高手解答一下,我这是什么问题呢?
是用json-taglib时编码问题吗?还有\u670d\u52a1\u5668\u7e41这种格式的代码是什么编码格式呢?

解决方案 »

  1.   

    某个环节处理中,转为 Unicode 编码格式了。从程序来看,应该是你这个“/WEB-INF/json.tld”自动转换的。
      

  2.   

    前面加一句:request.setCharaterEncoding("utf-8");
      

  3.   


    1、这是Unicode编码。
    2、如果你此处输出的是中文乱码,那原因可能是没有配过滤器。因为,struts2 的2.1.3之前版本的默认过滤器只过滤request,不过滤response。但是此处确实Unicode编码。应该跟json-taglib这个有关系。你可以试试,不用json-taglib,看看是否是ok或者中文乱码。
    还有,json-taglib这个哪里你看,是否有可以配置编码的地方。
      

  4.   

    request.setCharaterEncoding("utf-8")可以做个过滤器 以后就不用每次都要添加上这一句了
      

  5.   

    \UNNNNNNNN (这种形式是能表示任意unicode字符的) \uNNNN (表示的是在plane 0中的unicode字符)但是原本貌似应该存储字符的地方存储的却是编码,看来是经过了特殊处理的
      

  6.   

    这个问题应该是是json-taglib库编解码相关的问题。
    因为我在servlet中获得的中文字符是正确的,但是RequestDispatcher rd = this.getServletContext().getRequestDispatcher(forwardURL);
    rd.forward(request, response); forward到jsp端之后就变成unicode码了。我在jsp中加了request.setCharaterEncoding("utf-8")了,也不行。
      

  7.   

    与是json-taglib可能被自动转化为unicode了
      

  8.   

    你用的是servlet呀,没有用struts呀。
    既然这样,
    1、你尝试将json-taglib拿掉,在jso中通过el表达式取值,看看是否乱码。
    2、如果1中拿掉json-taglib后还是存在乱码,就需要在web.xml中配置一个自定义过滤器。对request和response都过滤。
      

  9.   

    在jsp中显示为unicode编码,返回到前台后用console.log打印出来时,还是unicode显示,但直接把字符串变量赋值给前台属性页面时,又能正常显示成中文了。可能是browser有自动将unicode转换成中文的功能吧。
      

  10.   

    在jsp中显示为unicode编码,返回到前台后用console.log打印出来时,还是unicode显示,但直接把字符串变量赋值给前台属性页面时,又能正常显示成中文了。可能是browser有自动将unicode转换成中文的功能吧。需要写代码设置的