|
锁定老贴子 主题:xmlhttp中文乱码的一种解决方案
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2006-08-31
我们用Xmlhttp做无刷新的时候,如果客户端向后台jsp提交汉字,那么就会遇到,汉字编码的问题
我采用的办法是汉字在传输之前,先用javascript 的escape方法给它编码,到了jsp界面再给它解码 客户端html代码如下: 客户端 。。。。。 function saveBack(){ var zuizhdfnr= document.riseForm.zuizhdfnr.value; var escapecode= escape(zuizhdfnr); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); var post="<?xml version='1.0' encoding='GB2312'?><dataset><answer>"+escapecode+"</answer></dataset>";//构造携带的数据 xmlhttp.open("POST","/risenetoabjcz/bjczoa/zfrx/oa-zfrx-save.jsp",false);//使用POST方法打开服务器连接 xmlhttp.setrequestheader("content-length",post.length); xmlhttp.setrequestheader("content-type","application/x-www-form-urlencoded"); xmlhttp.send(post);//发送数据 var res = xmlhttp.responseText;//接收服务器返回的数据 alert(res.trim()); } 。。。。。 服务器端jsp <%@ page import="java.sql.*"%> <%@ page import="java.util.*"%> <%@ page import="java.io.*"%> <%@ page import="java.io.ByteArrayOutputStream"%> <%@ page import="java.io.IOException"%> <%@ page import="javax.xml.parsers.DocumentBuilder"%> <%@ page import="org.w3c.dom.Document"%> <%@ page import="org.w3c.dom.Node"%> <%@ page import="org.w3c.dom.NodeList"%> <%@ page import="javax.xml.parsers.DocumentBuilderFactory"%> <% String answer = null; InputStream in = request.getInputStream(); String unescapeXML = readIntoString(in); String xmlString = unescape(unescapeXML); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); InputStream is = new ByteArrayInputStream(xmlString.getBytes()); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(is); answer = getValue(doc,"answer"); ..... %> <%! public String readIntoString(InputStream inputStream) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); for (int b = inputStream.read(); b >= 0; b = inputStream.read()) { outputStream.write((byte) b); } return new String(outputStream.toByteArray()); } private String getValue(Document inXmlDoc,String tag){ NodeList nodeList = inXmlDoc.getElementsByTagName(tag); String value = null; Node tagNode = nodeList.item(0); Node valueNode = tagNode.getFirstChild(); value = valueNode.getNodeValue(); return value; } public static String unescape(String s) { StringBuffer sbuf = new StringBuffer(); int i = 0; int len = s.length(); while (i < len) { int ch = s.charAt(i); if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' : as it was sbuf.append((char) ch); } else if ('a' <= ch && ch <= 'z') { // 'a'..'z' : as it was sbuf.append((char) ch); } else if ('0' <= ch && ch <= '9') { // '0'..'9' : as it was sbuf.append((char) ch); } else if (ch == '-' || ch == '_' // unreserved : as it was || ch == '.' || ch == '!' || ch == '~' || ch == '*' || ch == '\'' || ch == '(' || ch == ')') { sbuf.append((char) ch); } else if (ch == '%') { int cint = 0; if ('u' != s.charAt(i + 1)) { // %XX : map to ascii(XX) cint = (cint << 4) | val[s.charAt(i + 1)]; cint = (cint << 4) | val[s.charAt(i + 2)]; i += 2; } else { // %uXXXX : map to unicode(XXXX) cint = (cint << 4) | val[s.charAt(i + 2)]; cint = (cint << 4) | val[s.charAt(i + 3)]; cint = (cint << 4) | val[s.charAt(i + 4)]; cint = (cint << 4) | val[s.charAt(i + 5)]; i += 5; } sbuf.append((char) cint); } else { // 对应的字符未经过编码 sbuf.append((char) ch); } i++; } return sbuf.toString(); } private final static byte[] val = { 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F }; %> 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2006-09-13
我们的做法是直接用Javascript对内容进行UTF-8编码,Server只要把字符集设成UTF-8就可以了,无需额外处理
|
|
| 返回顶楼 | |
|
时间:2006-10-18
客户端页面,可以设置charset为utf8,最好了。
|
|
| 返回顶楼 | |
|
时间:2007-01-19
alang 写道 客户端页面,可以设置charset为utf8,最好了。
这样作的花客户端就不能直接写中文了,必须用 label,message那些东西了好像 |
|
| 返回顶楼 | |
|
时间:2007-01-20
alang 写道 客户端页面,可以设置charset为utf8,最好了。
前台显示还是用GBK,在后台处理用UTF-8字符集就行,我在Ajax结合Struts就是这样简单实现的 |
|
| 返回顶楼 | |
|
时间:2007-02-16
关于编码,建议都用UTF-8。方便又统一,搞两套反而不好。
不然,嘿嘿,万一哪天冒个法文。你估计就要咬牙切齿了。 |
|
| 返回顶楼 | |
|
时间:2007-03-20
个人认为用utf-8确实是最好的办法.
|
|
| 返回顶楼 | |
|
时间:2007-03-21
对内容进行UTF-8编码,用gb2312 简体中文不支持 "©"等符号
|
|
| 返回顶楼 | |
|
时间:2007-05-05
嗯嗯~~前段搞jsp也出现这问题,utf-8搞定的
|
|
| 返回顶楼 | |
|
时间:2007-06-07
UTF-8可以搞定的。
|
|
| 返回顶楼 | |













