用servlet PrintWriter 一个xml 里面有中文 ajax 的xmlhttprequest.responseXML 读取xml文件信息是js显示的中文为乱码,请问有没有什么办法可以解决。直接点就是java类给js传值,中文乱码问题。多谢各位。虽然可以把它们都转成%12%AB可以解决,但是有些麻烦,衷心求教,多谢……

解决方案 »

  1.   

    ps: 您的js是二进制文件么??
        我碰到过用eclipse编辑中文,页面上显示的是乱码,用ultraEdit编辑 js 就不会有这个问题。
      

  2.   

    response.setContentType("text/xml;charset=gb2312");
    response.setContentType("text/html;charset=gb2312");
      

  3.   

    你的xml文件编码方式,文件保存的时候选择编码方式和输出编码方式三者要统一。有3种编码方式可参考:UTF-8、gb2312和gbk。
      

  4.   

    response.setContentType("text/xml;charset=gb2312");
      

  5.   

    response.setContentType("text/xml;charset=UTF-8");
      

  6.   

    在页面上增加那个头部文件了么?声明字体的那部分(jsp中是<%@ page contentType="text/html, charset=gb2312"%>);
    html中也有类似的声明,找一下,加上后,看能否解决
      

  7.   

    xmlhttprequest.responseXML接受到的xml都是utf-8格式的 你需要转码
      

  8.   

    To:OnlyFor_love
    在js中应该怎么转码呢?求教,在baidu上没找到,多谢
      

  9.   

    建议全部utf-8
    包括数据库.jsp,htm,js,Servlet,javaBeen就不存在什么转码不转码的问题了。
      

  10.   

    怎么会不行呢?下面是在FireFox中刚刚通过的<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>rq.jsp</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <script language="javascript" type="text/javascript">
    var xmlDoc;
    var http_request=false;

    function initXMLHttp() {
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
    http_request.overrideMimeType('text/xml');
    }
    } else if (window.ActiveXObject) { // IE
    try {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }
    if (!http_request) {
    alert("您需要升级您的浏览器!");
    return false;
    }
    }

    function yourfunction(){
    initXMLHttp();
    http_request.open("get", "rs2.jsp", false);
    http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    http_request.send(null);
    xmlDoc=http_request.responseXML;
    var data=xmlDoc.getElementsByTagName("node1");
    document.getElementById("div1").innerHTML=data[0].firstChild.nodeValue;
    }
    </script>
    </head> <body>
    <input type="button" onclick="yourfunction()" name="button" value="Click me">
    <div id="div1"></div>
    </body>
    </html>
    ----------------------------------<%@ page language="java" pageEncoding="gb2312"%>
    <%
    response.setHeader("pragma","no-cache");
    response.setHeader("cache-control","no-cache");
    response.setHeader("expires","0");
    response.setHeader("content-type","text/xml;charset=gb2312");
            out.println("<docroot><node1>中国</node1></docroot>");
    %>
      

  11.   

    第二个文件改一下,IE和FF都可以了<%@ page language="java" pageEncoding="gb2312"%><%
    response.setHeader("pragma","no-cache");
    response.setHeader("cache-control","no-cache");
    response.setHeader("expires","0");
    response.setHeader("content-type","text/xml;charset=gb2312");
    out.println("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
    out.println("<docroot><node1>中国</node1></docroot>");
    %>
      

  12.   

    我用servlet写的 response xml就是乱码 嗷嗷郁闷,结贴,继续研究中……
      

  13.   

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>rq.jsp</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <script language="javascript" type="text/javascript">
    var xmlDoc;
    var http_request=false;function initXMLHttp() {
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
    http_request.overrideMimeType('text/xml');
    }
    } else if (window.ActiveXObject) { // IE
    try {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }
    if (!http_request) {
    alert("您需要升级您的浏览器!");
    return false;
    }
    }function yourfunction(){
    initXMLHttp();
    http_request.open("get", "http://localhost:7001/demo/jugpersonSelectedAction.do?d=1", false);
    http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    http_request.send(null);
    xmlDoc=http_request.responseXML;
    alert(xmlDoc);
    var data=xmlDoc.getElementsByTagName("node1");
    document.getElementById("div1").innerHTML=data[0].firstChild.nodeValue;
    }
    </script>
    </head><body>
    <input type="button" onclick="yourfunction()" name="button" value="Click me">
    <div id="div1"></div>
    </body>
    </html>我把rs2.jsp换成servlet为什么取不到返回值哦。。
    大家帮忙public class jugpersonSelectedAction extends Action
    {
        public ActionForward execute(ActionMapping actionMapping,
                ActionForm actionForm, HttpServletRequest request,
                HttpServletResponse response) throws Exception
        {
          String forward = "success";
            response.setHeader("pragma","no-cache");
            response.setHeader("cache-control","no-cache");
            response.setHeader("expires","0");
            response.setHeader("content-type","text/xml;charset=gb2312");
            System.out.println("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
            System.out.println("<docroot><node1>中国</node1></docroot>");       return actionMapping.findForward(forward); }