|
锁定老贴子 主题:老问题:ajax中文乱码
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2006-08-08
客户端表单中文数据送往服务端时,成乱码,不管是POST还是GET,在jsp中编码改成UTF-8;SERVLET的response也改为UTF-8
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2006-08-16
ajax的乱码问题 确实是个头痛的问题..
|
|
| 返回顶楼 | |
|
时间:2006-08-25
应该是你接受端的问题,接受之后试着做一次转码试试
|
|
| 返回顶楼 | |
|
时间: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()); //,"UTF-8" //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 }; %> |
|
| 返回顶楼 | |
|
时间:2006-10-10
我在用dojo的tree widget时,是这样处理json乱码的
一、JAVA代码中这么处理: httpServletResponse.setContentType("text/json; charset=gb2312"); 二、JSP页面头部加上: <%@ page contentType="text/html; charset=gb2312" %> |
|
| 返回顶楼 | |
|
时间:2006-10-12
boogie 写道 我在用dojo的tree widget时,是这样处理json乱码的
一、JAVA代码中这么处理: httpServletResponse.setContentType("text/json; charset=gb2312"); 二、JSP页面头部加上: <%@ page contentType="text/html; charset=gb2312" %> 同意,在返回时一定要设置编码 一般用gbk吧 gb2312 字符集小,有时候会出现?哦 |
|
| 返回顶楼 | |
|
时间:2006-10-12
xeme 写道 一般用gbk吧 gb2312 字符集小,有时候会出现?哦
应该用gbk |
|
| 返回顶楼 | |
|
时间:2006-10-21
客户端传来的用
new String(s.getBytes("iso8859-1"),"gbk");
去客户端的用 String(s.toString().getBytes("gbk"),"iso8859-1");
其他的如下 response.setContentType("text/xml;charset=gbk");
<%@ page contentType="text/html; charset=utf-8" %> 我用的tomcat5.5.在IE6中可以正常显示汉字,但在mozila和Opera下则不行。 请老大们解释一下这是为什么?是tomcat还是浏览器的问题?我的IE也设置了总是以UTF-8发送URL,为什么还是以ISO8859-1处理? |
|
| 返回顶楼 | |
|
时间:2006-10-21
为什么大家都在搞这个问题?搜索一下过去的资料,我提一点,关键的不是转码,而是全部统一使用UTF-8编码,然后在xmlhttp Post时使用encodeXXX即可(忘了具体JS函数名)。
我试过用转码的,特别是那段VBscript的程序,有漏洞的,对于特殊字符如$,%等则会不正确。 |
|
| 返回顶楼 | |
|
时间:2006-10-21
全部utf8下没发现什么问题。。。
包括html的保存格式,js文件保存格式,都是utf8. |
|
| 返回顶楼 | |











