上次提出了一个ajax下载中文编码问题,这次有遇到了ajax的上传中文乱麻问题
继续bs各种编码:)
遇到问题:在使用xhr发出请求时,请求的url中参数带中文,这时在后台解析request得不到中文
如:
request = new ActiveXObject("Microsoft.XMLHTTP");
request.open("GET", url);中我的url需要带中文参数
直接加参数是在后台解析不出来的,所以我使用方法对url进行编码转换
<!---->
request = new ActiveXObject("Microsoft.XMLHTTP");
request.open("GET", uriFunc());
//省略了对象定义
//..
function uriFunc() {
var separator = "?";
if (uri.indexOf("?") >= 0)
separator = "&";
return uri + separator + paramName + "=" + escape(inputField.value,'utf-8');
}
然后就要在后台进行解码了
以为没法直接从request中取到编码字符串,所以使用方法先取出url,然后再取出url的参数进行解码
取出url,以及取参数方法
<!---->String exfirstword = getUrlParameter(unescape(request.getQueryString()),"excludeuser");
public String getUrlParameter(String str,String targetstr){
String[] stringarray = str.split("&") ;
for(int i=0;i<stringarray.length;i++){
if(stringarray[i].startsWith(targetstr)){
stringarray=stringarray[i].split("=");
break;
}
}
return stringarray[1];
}
//解码方法
//以下是对js的escape进行解码
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 };
/**
* 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果
*
* @param s
* @return
*/
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();
}
这时候得到的
exfirstword 就是正确的中文了
问题解决
分享到:
相关推荐
综上所述,解决AJAX技术使用`XMLHttpRequest`对象传递参数时出现的中文乱码问题,关键在于保持客户端与服务器端的编码一致性。通过合理设置请求头、使用适当的编码和解码函数,可以有效避免此类问题的发生。此外,在...
#### Ajax中文参数问题概述 在使用Ajax进行数据传输时,如果请求中包含了中文字符,由于编码方式的不同,这些中文字符在服务器端解析时可能会出现乱码现象。这主要是因为客户端(浏览器)与服务器端之间对于字符集...
默认情况下,Ajax请求的数据是以UTF-8编码的,而Servlet默认的编码可能不是UTF-8,这可能导致汉字传输过程中出现乱码。为了解决这个问题,我们需要在Ajax请求时指定编码方式,并确保Servlet接收时也使用相同的编码。...
**Ajax中文问题** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。在网页应用中,Ajax可以创建...
然而,正如标题所提到的,SmartUpload在处理中文文件名时可能会出现乱码问题,这主要源于字符编码不一致导致的。 在描述中,提到了作者已经成功解决了这个问题。通常解决此类问题的方法包括: 1. **设置正确的字符...
总的来说,Ajax过滤器是一种解决Web应用中中文乱码问题的有效手段,通过在请求和响应之间添加一层处理,可以确保数据以正确的编码进行传输,提高应用的兼容性和用户体验。在实际项目中,根据具体需求,可能还需要...
这个压缩包提供的组建源码,专门针对中文乱码问题进行了优化,基于jspsmartupload库进行了改进,确保了在处理文件名时不会出现编码问题,从而提高了用户体验。 首先,我们要了解Java中的文件上传原理。在HTTP协议中...
只有这样才能确保XML文档的字符集被正确处理,避免乱码问题。 5. 在进行Ajax表单提交时,需要设置正确的Content-Type头部信息,以便告诉服务器发送的数据类型。例如: xmlHttp.setRequestHeader("Content-Type", ...
在Java服务器端,首先设置`Request.ContentEncoding`来处理可能的中文乱码问题。接着,使用`XmlDocument`类创建一个新的XML文档对象,并使用`Load()`方法从请求的输入流中加载接收到的XML数据。这样,XML数据就被...
通过这些步骤,我们可以确保在Ajax通信中中文参数的正确传输和解码,避免出现乱码问题。记住,对于不同的字符集,如GBK和GB2312,选择合适的编码转换策略至关重要。在实际开发中,推荐使用UTF-8作为统一的编码标准,...
GB2312是中国大陆的简体中文编码标准,主要包含常用汉字。项目中提及UTF-8编码,意味着代码可能已做好国际化的准备,但用户可以根据需求调整为GB2312以适应国内环境。 4. **缩略图生成**:文件上传完成后,通常会...
通过本文的介绍,我们了解了如何在AJAX中使用JavaScript的`send`方法来发送POST请求,并且详细探讨了如何设置正确的HTTP头部信息以避免中文乱码等问题。此外,还介绍了如何在服务器端使用`Request.Form`和`Request....
实例3 中文时间显示实例 实例4 删除字符串中的空白 实例5 字符串反转 实例6 字符串加密 实例7 检查日期的有效性 实例8 简单猜数游戏 实例9 验证信用卡号 实例10 计算两个数组并、交和差 实例11 数组排序 第2章 PHP...
本篇将详细探讨如何在Java环境下使用jQuery File Upload实现文件上传并处理中文文件名的乱码问题。 首先,jQuery File Upload的核心原理是利用HTML5的File API进行异步文件上传。它通过AJAX请求将文件分块上传到...
通过上述步骤,你应该能够解决使用jQuery Uploadify时`scriptData`中的中文乱码问题。在实际应用中,可能需要根据具体环境和服务器端语言进行微调,确保整个流程中的字符编码一致。如果仍然遇到问题,检查浏览器的...
总结起来,解决AJAX的GET和POST请求中的乱码问题主要涉及两方面:一是服务器端设置正确的响应字符编码,二是客户端确保请求数据的编码和解码过程与服务器端匹配。通过上述方法,可以有效地避免在处理非ASCII字符时...
这个测试项目已经解决了中文乱码问题,这意味着它能够正确处理含有中文字符的文件名,这对于中文环境下的应用来说至关重要。 首先,我们需要理解jQuery.uploadify的工作原理。它利用HTML5的File API和Ajax技术,...
在PHP开发中,文件上传是一项常见的任务,尤其是处理包含中文字符的文件名时,需要确保在上传过程中不会出现乱码问题。"php多文件上中文无乱码"这个标题所涉及的知识点主要涵盖PHP文件上传机制、字符编码处理以及...
尽管部分文本似乎是乱码或者非中文字符,但我们可以从标题、描述以及部分可辨识的信息中提炼出与Ajax相关的知识点。 ### 一、Ajax简介 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的...
3. **防止乱码问题** 中文文件名乱码是文件上传时常见的问题,主要源于字符编码的不一致。Java服务器端处理文件名时,应确保正确设置字符编码。在读取或写入文件名时,需使用UTF-8编码,因为它是支持最多语言的标准...