问题是,我用一个servlet返回xml文件(里面有中文数据),发现前台解析不了,后来发现是中文问题,我改成用out直接打印到浏览器,弹出报错页面说:“无法显示 XML 页。……文本内容中发现无效字符。……”,可是我有response.setContentType("text/xml;charset=GBK");搞得我好纠结,求大家帮帮忙,期末作业来的,有快考试了,现在因为这个都还没复习啊!!
下面是doPost中的代码public void doPost(HttpServletRequest request,HttpServletResponse response)   throws    ServletException,IOException
       {
                  response.setContentType("text/xml;charset=GBK");
PrintWriter out = response.getWriter();
StringBuffer sb = new StringBuffer("");
sb.append("<Books>");
sb.append("<book>");
sb.append("<title>"+"基础"+"</title>");
sb.append("</book>");
sb.append("</Books>");
out.println(sb.toString());
out.flush();
                  out.close();
         }

解决方案 »

  1.   

    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/xml;charset=utf-8");试试看,编码可以自己指定
      

  2.   

    拜托1楼能不能说清楚点?怎么不是XML?我把里面的“基础”改掉后可以以正常的xml在浏览器上显示啊!
    急啊……!求帮助
      

  3.   

    就是编码问题啊,加了response.setContentType("text/xml;charset=utf-8");以后就是xml了
      

  4.   

    你的Eclipse是什么编码啊,
    “基础”可是经过eclipse编译过的啊
      

  5.   

    你先把字符打印出来看看出来的是什么。out.println("<?xml version='1.0' encoding='gbk' ?>");
    加一行这个看看
      

  6.   

    2楼!很感谢你的回答,发现在浏览器可以显示了,可是新的问题又来了,我的本意是通过这个serlvet返回一个XML文件给前台的Ajax;可是用Xpath获得节点,用length测了一下长度,发现为0,它解析不了返回的XML文件……奇怪了,之前我不在XML里加入中文数据javascript还能解析出来,现在整个都不行了。晕死……
      

  7.   

    PrintWriter 是字符编码打印,
    试用一下字节编码的打印,OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream(),"utf-8");
      

  8.   

    太感谢了楼上各位了,谢谢!!查了半天是我改代码的时候把记得名字写错了,现在终于可以了。呼……
    可是你们能告诉我为什么吗?我自己新建一个XML文件(有中文数据),编码改成“UTF-8”用IE打开,会报错,说有无效字符,编码为“GBK”时才能正常显示,但是为什么在servlet里面charset=UTF-8却没问题呢?
      

  9.   


    window系统简体中文版的记事本默认的编码格式是gbk你指定xml的编码格式为utf-8就会出错的在保存文本文件时在文件名下面有个选编码的选utf-8就正常了
      

  10.   

    IE浏览器默认是按gbk编码方式显示的吧,你在IE里选一下编码格式试试