前端js发送经过编码的http请求到gbk的后台应用,这时候需要进行编码解码的处理。
如
127.0.0.1:8080/xxx.xhtml?keywords=%E8%87%AA%E8%A1%8C%E8%BD%A6&encode=utf-8
当web应用收到这样的请求时,如果应用或者服务器上默认做了gbk编码的拦截处理,那么这时候用request.getParameter时将会出现乱码,解码后的中文字符最后一个字无法解码。
解决方法:用request.getQueryString()方式,获得queryString后自己重新解析这个url参数,代码如下
HttpServletRequest request ....;
String encode = StringUtil.trimToNull(request.getParameter("encode"));
//如果是utf-8编码
if (StringUtil.isEqualsIgnoreCase(encode, "utf-8")) {
//记录原始参数
if (request != null) {
Enumeration parameterNames = request.getParameterNames();
if(parameterNames!=null){
while (parameterNames.hasMoreElements()) {
String parameterName = parameterNames.nextElement().toString();
String parameterValue = StringUtil.trimToNull(request.getParameter(parameterName));
if(parameterValue!=null){
//parameterValue = URLDecoder.decode(parameterValue, "UTF-8");
try {
//对参数进行特殊处理
String queryString = request.getQueryString();
String[] querys = StringUtil.split(queryString, "&");
if(querys!=null && querys.length > 0){
for(String query : querys){
parameterValue = StringUtil.substring(query, StringUtil.getLength(parameterName+"="));
parameterValue = URLDecoder.decode(parameterValue, encode);//根据encode参数值自定义解码
}
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
}
}
//对于没有传值的参数,直接忽略应该没有什么副作用
if (!StringUtil.isEmpty(parameterValue)) {
request.setAttribute(parameterName, parameterValue);
}
}
}
}else {
//错误异常处理
return false;
}
}
return true;
分享到:
相关推荐
解决方法是在服务器端设置字符编码,例如Java中的`request.setCharacterEncoding("utf-8")`。 - **GET请求乱码**: - IE使用GBK编码,其他浏览器使用UTF-8。在服务器端设置编码(如Tomcat的`...
在PHP中,如果接收到的POST数据是乱码,可以在服务器端进行转换,如使用`iconv`函数将UTF-8编码转换为GBK。例如: ```php $_POST["content"] = iconv("UTF-8", "GBK", $_POST["content"]); ``` 对于Java ...
4. **服务器配置**:确保服务器配置正确处理UTF-8编码的请求。例如,在ASP.NET环境中,IIS服务器和Web应用程序的 globalization 元素需要设置正确的字符集。 总结一下,解决Ajax请求中文乱码问题的步骤如下: 1. ...
由于ASP默认使用GBK编码,但现代网站多数使用UTF-8编码,因此在发送请求前需要将数据编码转换成UTF-8格式,以避免在接收响应时出现乱码。作者提供了一个编码转换函数`BytesToBstr`,用于将字节流转换为特定编码的...
通过以上方法,我们可以成功地使用AJAX实现UTF8编码的表单提交到GBK编码的脚本,同时也能处理不同编码的表单数据。这在进行数据采集或者处理来自不同编码环境的数据时,显得尤为重要。记得在实际应用中进行充分的...
5. ASP.NET(ASP-UTF-8/GBK): - 类似于C#实现,使用.NET框架的HttpClient或WebClient发送请求。 - 需要注意字符编码问题,GBK编码的参数需要正确处理。 6. PHP-UTF-8/GBK: - PHP中可以使用file_get_contents...
1. **请求头设置不正确**:Ajax请求默认使用UTF-8编码,但服务器可能使用了不同的编码格式。若在`Content-Type`请求头中没有明确指定编码,服务器可能无法正确解析中文字符。 2. **响应头设置不正确**:服务器返回...
2. **服务器端配置**:确保服务器端代码能够识别并处理UTF-8编码的数据。例如,在PHP中,可以在接收到数据后进行转换: ```php $data = $_POST; foreach ($data as &$value) { $value = mb_convert_encoding($...
字符编码是用来表示文本字符的规则,如ASCII、GB2312、GBK、UTF-8等。在网页开发中,最常用的是UTF-8编码,因为它能支持全世界大部分语言的字符。 标题“前端中文编码问题”暗示了我们关注的焦点是前端环境中,中文...
对于GBK或其他非UTF-8编码的环境,情况会更复杂。你需要确保服务器和客户端都使用相同的编码。在发送请求之前,可以先将中文字符串转换为GBK编码,然后使用"escape"函数进行编码。在接收端,再将其解码回GBK,从而...
例如,如果服务器期望的是GBK编码,那么接收到UTF-8编码的数据就会产生乱码。 在Ajax发送数据时,Content-Type字段用于指示数据的格式。当设置为"application/x-www-form-urlencoded"时,数据将以键值对的形式发送...
支付宝支付DEMO是一个用于演示如何在服务器端集成支付宝支付功能的应用示例,涵盖了多种编程语言,包括C#、Java和PHP,且针对不同的字符编码(GBK和UTF-8)提供了相应的实现。这些DEMO旨在帮助开发者理解并实现与...
2. POST提交时编码不一致:POST请求默认使用UTF-8编码,若服务器端处理编码与之不符,也会产生乱码。 解决乱码问题的方法包括: 1. 对客户端页面,确保页面的charset属性与服务器返回数据的编码一致,例如在HTML...
这是因为默认情况下,AJAX(Asynchronous JavaScript and XML)请求通常假设服务器返回的数据是用UTF-8编码的。为了解决这个问题,我们需要在发送请求前指定正确的字符集。 在AJAX请求中,我们使用`XMLHttpRequest`...
GBK和UTF-8是两种常见的字符编码格式。GBK是中国大陆的国家标准,主要针对中文字符,它兼容GB2312编码,包含大部分汉字。UTF-8则是一种广泛使用的多字节字符编码,能表示Unicode字符集中的所有字符,包括中文、英文...
考虑到中文乱码,应确保数据接收后仍然是UTF-8编码: ```php $data = $_POST['param1']; // 检查并转换编码,确保是UTF-8 if (mb_detect_encoding($data, 'UTF-8', true) !== true) { $data = iconv('GBK', 'UTF-8...
1. **服务器编码设置**:服务器返回的数据可能是以特定的字符编码格式(如GBK或UTF-8)生成的,如果客户端(浏览器)不正确识别这个编码,就会出现乱码。 2. **HTTP头信息**:Ajax请求和响应中,通过`Content-Type`...
// 假设目录名需要从GBK转为UTF-8 foreach ($files as &$file) { if (function_exists('iconv')) { $file = iconv('GBK', 'UTF-8', $file); } elseif (function_exists('mb_convert_encoding')) { $file = mb_...
例如,Firefox、Chrome等现代浏览器通常默认使用UTF-8编码,因此在处理跨浏览器的编码问题时,推荐使用UTF-8作为统一的编码标准,以减少兼容性问题。 总结来说,理解和处理服务器与客户端的编码问题需要考虑以下几...
根据服务器返回的Content-Type,使用相应的解码方式,例如UTF-8、GBK等。 4. **发送和接收数据** - 使用`InternetWriteFile`函数发送POST数据,如果是GET请求,数据通常在URL中。 - 通过`InternetReadFile`读取...