我在页面上输入一个公司名,然后利用Ajax把公司的详细信息自动在表单对应的元素上显示出来.如果在服务器上返回的XML中没有包括中文,可以正常显示,否则就不能显示.比如:<enter><id>2</id><tradename>张三</tradename><tradetel>0755-12454545</tradetel></enter>不能显示.我的服务端代码为:public ActionForward getByEnterpriseName(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
try {
String enterpriseInfo = "";
String companyName = request.getParameter("companyname");// 获取企业名称
Sysenterprise enterprise = sysenterpriseService
.getsysenterpriseFirmname(companyName);// 根据企业名称获取对应的企业信息
PrintWriter out = response.getWriter();
if (enterprise != null) {
enterpriseInfo = "<enter><id>" + enterprise.getEnterpriseid()
+ "</id><tradename>" + enterprise.getContacter()
+ "</tradename><tradetel>" + enterprise.getPhone()
+ "</tradetel></enter>";
response.setContentType("text/xml;charset=UTF-8");
System.out.println(enterpriseInfo);
out.println(enterpriseInfo);
}else{

System.out.println("not find");
}
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}不知各位对此有没有什么解决办法?有的话请帮下忙,谢谢了!

解决方案 »

  1.   

    呵呵,把jsp改成utf-8。
    你在servlet里response.setContentType( "text/xml;charset=UTF-8 ");
      

  2.   

    response.setContentType( "text/xml;charset=UTF-8 "); 
    这里试试 GBK  或 GB2312还有 
    String   companyName   =   request.getParameter( "companyname ");//   获取企业名称 
    类似于 companyName   的这几个字符串 在out.print之前都要重新编码
    比如:
    String   companyName   =   request.getParameter( "companyname ").getBytes("8859_1");
    这样应该就行了或者是这样的
    byte b[]=enterpriseInfo.getBytes("gb2312");
    enterpriseInfo=new String(b);小弟也被JSP的中文问题困惑了很久 希望这些能对LZ有所帮助
      

  3.   

    在传递中文的情况下String   companyName   =   request.getParameter( "companyname ");
    这句中的 "companyname " 是乱码所以在
    Sysenterprise   enterprise   =   sysenterpriseService.getsysenterpriseFirmname(companyName); 
    中 就会出错
      

  4.   

    改成
    String  companyName = request.getParameter("companyname").getBytes( "8859_1 "); 
    试试看
      

  5.   

    我得到 companyName 不是乱码, 而且可以查出数据来,把他组成以下XML:
    <enter>
        <id>1</id>
        <tradename>张三</tradename>
        <tradetel>0775-2978191</tradetel>
    </enter>
    但是在JS里面设置:
    var result = xmlHttp.responseXML.getElementsByTagName("enter");//xmlHttp为XMLHttpRequest
    document.getElementById("tradename").value=result[0].childNodes[1].firstChild.nodeValue;
    document.getElementById("tradetel").value=result[0].childNodes[2].firstChild.nodeValue;
    如果节点tradename的值是英文就可以得到值,并且在文本框中显示.
    如果节点tradename的值是中文就不能在文本框中显示,不知道为什么?
      

  6.   

    生成XML的时候 也要注意转码
    我认为 xmlHttp.responseXML.getElementsByTagName( "enter ")
    这里的enter 传过来的中文内容 是错的 
    试试看在这步 .getBytes( "gb2312 ") 一下
      

  7.   

    xmlHttp.responseXML.getElementsByTagName("enter").getBytes("gb2312");
    这样吗?好像还是不行哦
      

  8.   

    我以前也遇到这样的问题,没有解决,你用的是不是prototype.js,建议换个框架
    我的解决方法是:
    在服务器端直接得到页面的HTML代码,
    客户端直接用xmlHttp.responseText得到结果
    document.getElementById("divResult").innerHTML = xmlHttp.responseText;
      

  9.   

    这样也是个可行的办法,但是xmlHttp.responseText还是有中文的话知能不能行得通呢?
      

  10.   

    在PrintWriter   out   =   response.getWriter()前加上response.setContentType( "text/xml;charset=GBK")
    就可以了啊
      

  11.   

    问题解决了,我在服务器的返回的XML中加入一个头:<?xml version='1.0' encoding='gbk'?>就OK了!
    谢谢各位!