`
wzucxd
  • 浏览: 26584 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

UTF-8异步请求到gbk应用的处理方法2

 
阅读更多

前端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;


分享到:
评论

相关推荐

    ajax异步请求小结

    解决方法是在服务器端设置字符编码,例如Java中的`request.setCharacterEncoding("utf-8")`。 - **GET请求乱码**: - IE使用GBK编码,其他浏览器使用UTF-8。在服务器端设置编码(如Tomcat的`...

    ajax中文乱码的各种解决办法总结.docx

    在PHP中,如果接收到的POST数据是乱码,可以在服务器端进行转换,如使用`iconv`函数将UTF-8编码转换为GBK。例如: ```php $_POST["content"] = iconv("UTF-8", "GBK", $_POST["content"]); ``` 对于Java ...

    ajax请求乱码的解决方法(中文乱码)

    4. **服务器配置**:确保服务器配置正确处理UTF-8编码的请求。例如,在ASP.NET环境中,IIS服务器和Web应用程序的 globalization 元素需要设置正确的字符集。 总结一下,解决Ajax请求中文乱码问题的步骤如下: 1. ...

    ASP模拟POST请求异步提交数据的方法

    由于ASP默认使用GBK编码,但现代网站多数使用UTF-8编码,因此在发送请求前需要将数据编码转换成UTF-8格式,以避免在接收响应时出现乱码。作者提供了一个编码转换函数`BytesToBstr`,用于将字节流转换为特定编码的...

    使用AJAX实现UTF8编码表单提交到GBK编码脚本无乱码的解决方法

    通过以上方法,我们可以成功地使用AJAX实现UTF8编码的表单提交到GBK编码的脚本,同时也能处理不同编码的表单数据。这在进行数据采集或者处理来自不同编码环境的数据时,显得尤为重要。记得在实际应用中进行充分的...

    支付宝单笔交易查询接口

    5. ASP.NET(ASP-UTF-8/GBK): - 类似于C#实现,使用.NET框架的HttpClient或WebClient发送请求。 - 需要注意字符编码问题,GBK编码的参数需要正确处理。 6. PHP-UTF-8/GBK: - PHP中可以使用file_get_contents...

    Ajax中文乱码问题解决方法

    1. **请求头设置不正确**:Ajax请求默认使用UTF-8编码,但服务器可能使用了不同的编码格式。若在`Content-Type`请求头中没有明确指定编码,服务器可能无法正确解析中文字符。 2. **响应头设置不正确**:服务器返回...

    jquery uploadify scriptData 中文乱码

    2. **服务器端配置**:确保服务器端代码能够识别并处理UTF-8编码的数据。例如,在PHP中,可以在接收到数据后进行转换: ```php $data = $_POST; foreach ($data as &$value) { $value = mb_convert_encoding($...

    前端中文编码问题

    字符编码是用来表示文本字符的规则,如ASCII、GB2312、GBK、UTF-8等。在网页开发中,最常用的是UTF-8编码,因为它能支持全世界大部分语言的字符。 标题“前端中文编码问题”暗示了我们关注的焦点是前端环境中,中文...

    escape --AJAX和JS传中文乱码的最终解决方案

    对于GBK或其他非UTF-8编码的环境,情况会更复杂。你需要确保服务器和客户端都使用相同的编码。在发送请求之前,可以先将中文字符串转换为GBK编码,然后使用"escape"函数进行编码。在接收端,再将其解码回GBK,从而...

    ajax乱码解决汇总

    例如,如果服务器期望的是GBK编码,那么接收到UTF-8编码的数据就会产生乱码。 在Ajax发送数据时,Content-Type字段用于指示数据的格式。当设置为"application/x-www-form-urlencoded"时,数据将以键值对的形式发送...

    支付宝支付DEMO

    支付宝支付DEMO是一个用于演示如何在服务器端集成支付宝支付功能的应用示例,涵盖了多种编程语言,包括C#、Java和PHP,且针对不同的字符编码(GBK和UTF-8)提供了相应的实现。这些DEMO旨在帮助开发者理解并实现与...

    JavaScript+JQuery教程

    2. POST提交时编码不一致:POST请求默认使用UTF-8编码,若服务器端处理编码与之不符,也会产生乱码。 解决乱码问题的方法包括: 1. 对客户端页面,确保页面的charset属性与服务器返回数据的编码一致,例如在HTML...

    解决JS请求服务器gbk文件乱码的问题

    这是因为默认情况下,AJAX(Asynchronous JavaScript and XML)请求通常假设服务器返回的数据是用UTF-8编码的。为了解决这个问题,我们需要在发送请求前指定正确的字符集。 在AJAX请求中,我们使用`XMLHttpRequest`...

    美丽说_ECSHOP网站模板js代码前台前端H5页面+后台整站源码.rar

    GBK和UTF-8是两种常见的字符编码格式。GBK是中国大陆的国家标准,主要针对中文字符,它兼容GB2312编码,包含大部分汉字。UTF-8则是一种广泛使用的多字节字符编码,能表示Unicode字符集中的所有字符,包括中文、英文...

    php+Ajax(GET&POST)完美实例

    考虑到中文乱码,应确保数据接收后仍然是UTF-8编码: ```php $data = $_POST['param1']; // 检查并转换编码,确保是UTF-8 if (mb_detect_encoding($data, 'UTF-8', true) !== true) { $data = iconv('GBK', 'UTF-8...

    ajax乱码解决办法

    1. **服务器编码设置**:服务器返回的数据可能是以特定的字符编码格式(如GBK或UTF-8)生成的,如果客户端(浏览器)不正确识别这个编码,就会出现乱码。 2. **HTTP头信息**:Ajax请求和响应中,通过`Content-Type`...

    用ajax向php申请遍历磁盘目录(EXT-js)

    // 假设目录名需要从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作为统一的编码标准,以减少兼容性问题。 总结来说,理解和处理服务器与客户端的编码问题需要考虑以下几...

    在vs2010下使用C++调用webserver接口

    根据服务器返回的Content-Type,使用相应的解码方式,例如UTF-8、GBK等。 4. **发送和接收数据** - 使用`InternetWriteFile`函数发送POST数据,如果是GET请求,数据通常在URL中。 - 通过`InternetReadFile`读取...

Global site tag (gtag.js) - Google Analytics