【重金悬赏】ajax返回页面乱码问题?

zeq258 2006-07-09 12:00:08
根据页面提交的条件,到后台数据库查到值

查找结果是中文,在后台打印出来没有问题,

可是,把这些中文信息,组织成 xml 返回到页面,

在页面得到的,都是 “???????????” ,

那位兄弟帮帮忙,急呀!

分不够,我可以再加!

说到做到!
...全文
468 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeq258 2006-07-11
  • 打赏
  • 举报
回复
问题还是自己搞定了,
不过,还是谢谢大家的关注!
wangxhere 2006-07-09
  • 打赏
  • 举报
回复
应该是编码问题,同意上面说的,同时也可以看看客户端浏览器编码设置
IceCraft 2006-07-09
  • 打赏
  • 举报
回复
这是编码问题,应该配合你的系统的整体架构一起解决。
要做到不因用户浏览器语言或编码的不同而导致出现各种编码问题,你的系统应该做到国际化。
数据库应该使用UTF-8编码,前台jsp页面也使用UTF-8,同时增加一个编码过滤器(Spring框架提供了一个)。配置了这些后,用户录入和显示数据应该都没有问题了。
来看你的这个问题。如果你的ajax使用的是DWR框架,只需要在上述的编码过滤器上增加一个过滤路径“/dwr/*”,在使用Spring的那个编码过滤器的情况下,web.xml就有:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/dwr/*</url-pattern>
</filter-mapping>

如此,页面中使用DWR Ajax查出来的东西就不会有乱码了。

另一种情况,你自己编写低层的javascript来自己实现ajax功能,那么应该要使用一个比如servlet来输出xml。如果使用了编码过滤器,那么也是类似的配置,让过滤器来过滤servlet的请求路径。

如果楼主没有如上所说的国际化、编码过滤器、DWR这些东西,但是是使用servlet来输出xml并且是自己写javascript来实现ajax。那么在你的servlet中输出xml的部分应该类似如下:
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(xml);
out.flush();
out.close();

这里的UTF-8是在你的页面编码也是UTF-8时就会正常显示了,如果你的页面不是UTF-8,那么把这里换成对应的比如GBK、GB2312等试试,直到页面显示正常即可。
dlxu 2006-07-09
  • 打赏
  • 举报
回复
页面编码是不是有问题?在页面上用System.out.println打出来看看呢。或者是Javascript也有编码?
zeq258 2006-07-09
  • 打赏
  • 举报
回复
谢谢楼上几位的答复,

但是,问题还没有解决,

能留下你们的联系方式吗,咱们联系,!

我的 qq: 49137296
TinyJimmy 2006-07-09
  • 打赏
  • 举报
回复
数据库编码要从数据库、应用平台以及输出输入数据几个方面下手。任何一个环节有问题都会造成乱码。

读取:数据库=>VM内存=>浏览器
VM读取的数据库的内容需要和数据库的编码要能够匹配得上,通过System.out.println(...)可以判断。如果打印得内容是乱码,恭喜你,找到问题了。从内存到浏览器得输出无非就是设置response输出的encoding,如果使用JSP,在JSP上也需要设置相关的Encoding即可。

写入:数据库=>VM内存=>浏览器
如果读取数据不乱码,写入就比较简单了。读取浏览器写入数据需要使用编码读入,也可以设置平台的一些设置,保证读入的数据正常(还是System.out.println),再从内存写入。

使用JDBC、连接池或者使用EJB、Hibernate等不同方法写入的配置有些不一样,只要抓住一点,搞准数据库编码和VM编码,做好配置由平台转换或自己转换皆可

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧