一个读取xmlhttp传递过来数据并进行字符转换的问题,中文显示始终是乱码。

hengxin54 2004-09-28 04:07:06
在客户端用js调用xmlhttp,并发送一段数据到服务器执行,这段数据中有中文字符,服务器在接收数据后直接显示这段数据,但是中文显示是乱码,我已经转换过字符了。程序如下:
1、服务器端,一个servlet
BufferedReader Stream = request.getReader();
String sline = " ";
String S = "";
do{
if(sline == null)
break;
sline = Stream.readLine();
if(sline != null)
S +=String.valueOf(sline) ;
} while(true);
String str=new String(S.getBytes("iso-8859-1"),"gb2312");

out.println(str);

2、客户端
<script language="vbscript">
Function bytes2BSTR(vIn)

Dim strReturn,i,ThisCharCode,innerCode,Hight8,Low8,NextCharCode
strReturn = ""

For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next

bytes2BSTR = strReturn

End Function
</script>
<script language="JavaScript">
function getXML(URL) {
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("GET",URL, false);
try {
xmlhttp.Send("测试文字!");
var result = xmlhttp.status;
}
catch(e) {
return(false);
}
if(result==200) {
return(bytes2BSTR(xmlhttp.responseBody));
}
var xmlhttp = null;
}
function update()
{
var a=getXML('testreadxmlhttp.jsp');
document.all("res").value=a;
}</script>
请点击发送按钮:<input type="button" value="发送" onclick="javascript:update();">
<textarea cols=50 rows=10 id="res"></textarea>
点“发送”按钮后,在文本域中显示的中文始终是乱码。

暂时给20分,问题解决了100分或者200分感谢!
...全文
428 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtusmchen12 2005-01-26
  • 打赏
  • 举报
回复
在你的servlet里将xmlhttp过来的参数转码至utf-8肯定能解决
byte[] bs = str.getBytes("ISO-8859-1");
String result = new String(bs, "UTF-8");
hengxin54 2004-12-15
  • 打赏
  • 举报
回复
没搞定,结贴了。
yzh315 2004-12-13
  • 打赏
  • 举报
回复
顶一下
nittystone 2004-12-07
  • 打赏
  • 举报
回复
??
nittystone 2004-11-14
  • 打赏
  • 举报
回复
楼主 这个问题我也遇到过 是有点诡异

我测试出这个问题产生的结果是这样的。
(我得服务端是jsp不是servelt 你转换成相应的写法测一下)

如果你在一个utf8编码的jsp文件里创建xmlhttp,
那么服务端取数据的页面的编码格式要设置为
<%@ page contentType="text/html; charset=UTF-8"%>
而且要<% request.setCharacterEncoding("UTF-8"); %>
才能接受传入的参数重的中文。

如果是在一个gbk编码的html文件里,或者一个 .js文件里创建xmlhttp
那么服务端取数据的页面的编码格式要设置为
<%@ page contentType="text/html; charset=GBK"%>
而且要<% request.setCharacterEncoding("GBK"); %>
才能接受传入的参数重的中文。


stonecsdn 2004-11-14
  • 打赏
  • 举报
回复
<script language="vbscript">
Function bytes2BSTR(vIn)

Dim strReturn,i,ThisCharCode,innerCode,Hight8,Low8,NextCharCode
strReturn = ""

For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next

bytes2BSTR = strReturn

End Function
</script>
<script language="javascript">
function receive(url){
var xmlObject = new ActiveXObject("Microsoft.XMLHTTP");


xmlObject.open("GET",url,false);
//xmlObject.setrequestheader("content-length",post.length);
xmlObject.setrequestheader("content-type","text/html; charset=gb2312");
xmlObject.send();
//var res = xmlObject.responseText;
//alert(res);
return (bytes2BSTR(xmlObject.responseBody));

}
这是我用过的,没有问题
hengxin54 2004-11-14
  • 打赏
  • 举报
回复
不,主要是用xmlhttp发送数据到服务端,服务端接收后的数据转换也是乱码。
chnjxiang 2004-11-04
  • 打赏
  • 举报
回复
xmlhttp获得数据的时候默认的是以utf-8格式,而我们的页面通常是gb2312格式,所以会乱码
hengxin54 2004-11-04
  • 打赏
  • 举报
回复
怎么编码啊?
这么久了一直没有搞定,麻烦给点代码,谢谢了!
zoominet 2004-10-09
  • 打赏
  • 举报
回复
这个问题前面的帖子已经解决,搜搜以前的贴吧。
hengxin54 2004-10-09
  • 打赏
  • 举报
回复
兄弟们,帮我顶一下啊。
rosen 2004-10-09
  • 打赏
  • 举报
回复
你的XML数据流或者文件要编码为:gb2312
hengxin54 2004-10-09
  • 打赏
  • 举报
回复
搜过了,没有,不是URL参数传递,是能过xmlhttp的send方法发送过去的数据。
hengxin54 2004-10-07
  • 打赏
  • 举报
回复
哎,不行啊,报错。
应该是服务器读取数据的时候出错,因为数字和字母都能正常显示,就是中文的是乱码。
古布 2004-10-03
  • 打赏
  • 举报
回复
加上这个试一下
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;gb2312");
bp69 2004-09-28
  • 打赏
  • 举报
回复
不懂,帮你up

81,092

社区成员

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

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