• 全部
  • 问答

xmlHttp.responseText中的数据在js中是乱码,请问该如何解决?

ntxs 2006-01-05 10:56:12
查阅了本版块所有关于乱码的问题,找不到解决方法,无奈下之后开帖询问,请大家帮帮忙。

代码情景:
java中:
comms.response.setContentType("text/text");
comms.response.setEncoding("MS932");
comms.response.getHttpServletResponse().getWriter().write(setWaribaitaiCmb());

在js中:
var response = xmlHttp.responseText;
就出现乱码了。

后来我在java中:将字符串转换为“MS932”字符集,在js中就变成了%890……之类的字节流了,得不到我想要得文字。

之前乱码问题是在java中解决的。
请问这个问题在js中怎么解决呢?

谢谢大家帮忙。
...全文
482 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
emu 2006-01-06
问的很多,答案也很多了。
http://www.blogjava.net/eamoi/archive/2005/12/05/22516.html

我一般直接用终极手段,escape/unescape(这两个函数的服务器端版本要自己写)
回复
meizz 2006-01-06
你可以考虑一下不使用 xmlhttp 而采用一个隐藏的 iframe 来加载后台的数据,然后再用脚本做DOM操作呢?
回复
ntxs 2006-01-06
谢谢楼上各位的帮忙

to hax(海曦) :
很感谢你的答复,但是情况似乎不容乐观。

1。我是要从数据库中取值,数据库中用的编码似乎不是utf-8

2。为了解决乱码问题,我们在java中写了不少代码,确保整个工程的字符集为“MS932”。否则不能正确显示需要的文字。

所以 简单的改变源文件的格式是不能解决问题的,反而会引出很多大问题(昨天把java代码中的转字符集的方法修改成“utf-8”, 结果一打开页面就出js错,就是跟字符集有关!!!)

我其实只需要让文字在js中能正确显示就可以了,还有别的解决方法吗?
回复
hax 2006-01-06
楼主的代码搞笑了点
comms.response.setContentType("text/text");
comms.response.setEncoding("MS932");

text/text是什么mimetype?
MS932——你的jdk倒也认啊,呵呵。

建议你全部使用utf-8,所有源文件(html,js,java...)都保存为utf-8,相关的保存此处不赘述,请自行解决。然后js获得的就肯定正确了。

to emu:使用escape和unescape我认为是不好的方法。一来此两方法已经被deprecated了,二来此方法encode后会显著增加文件长度,三来你要自己写server端的代码——显然对于许多人而言这个太难了,呵呵。我不相信另存为utf-8都学不会,会能自己写着两个方法,哈哈。归根到底,在搞清楚encoding机制后,这个就没有必要了。

回复
emu 2006-01-06
至于内容长度,我觉得在很多实际应用场合这个问题并不是很敏感的,除非确定这个问题造成了瓶颈,否则就不是问题。
回复
emu 2006-01-06
to: hax(海曦)
escape和unescape已经被deprecated了,这个消息是从哪里来的?这是大事啊!
server端的代码早有现成的了,我上面留的页面里面有链接过去。也可以直接从这里拷贝下来:
http://www.blogjava.net/emu/articles/4773.html
回复
meizz 2006-01-05
这样吧,你把后台提供的源,若是文件一定要UTF-8格式的,若是流,那也设置成UTF-8格式的,前台页面文件也存为UTF-8格式的。注意,不光是设置成 UTF-8 并且还在将文件也另存为这种格式
回复
ntxs 2006-01-05
大家是如何利用ajax设置combox中的选项而不出现乱码的呢?
请高手指教。
回复
ntxs 2006-01-05
如何改变后台提供的字符源?

1 comms.response.setContentType("text/text");
comms.response.setEncoding("UTF-8");
comms.response.getHttpServletResponse().getWriter().write(setWaribaitaiCmb());
乱码

2 URLEncoder.encode(array[i][j], "MS932")
或者 URLEncoder.encode(array[i][j], "UTF-8")
出的结果是:%E5%CD%9D%F4%83%65%83%58%83%67%83%65%83%58%83%67

怎么办呢?
回复
meizz 2006-01-05
后台提供的字符源格式应该为 UTF-8 格式,这样在前台通过 xmlhttp 可以得到正确的中文字符
回复
dongua 2006-01-05
在js客户端就不能这样转换了。
回复
hhjjhjhj 2006-01-05
用ADODB.stream转换,具体代码忘了在那里了.

大概是这样的
dim adostream as adobd.stream
set adostream=xmlHttp.responseStream
adostream.Charset="GB2312"
s=adostream.ReadText
回复
发帖
JavaScript
创建于2007-09-28

8.5w+

社区成员

Web 开发 JavaScript
申请成为版主
帖子事件
创建了帖子
2006-01-05 10:56
社区公告
暂无公告