`

解决不同编码,不同语言间传递数据乱码的通用办法

    博客分类:
  • ajax
阅读更多
有时候我们在使用ajax传递数据的时候总是碰到中文乱码问题,如果各页面,前后台之间传递的编码都是UTF-8那倒还好处理,万一不都是UTF-8呢?
下面提供通用的办法,可以解决中文,日文,韩文等语言乱码问题
//从数据库查出所有对象
List list= service.getList(tableName);
//将list传递到下个界面
session.setAttribute("list", list);

获得传下来的数据,依次填入option,注意option的value值是name编码后的值,这样value值就不会是中文的了,这里使用的是velocity语法!
#set($list= $session.getAttribute("list"))
<select align="center" name=""  id="selection">
        <option value="" >&nbsp;</option>
    	#if ($list)
            #foreach($oneInList in $list)
               <option value="$oneInList.getName_encode()" >$oneInList.getName()</option>
    	   #end
    	#end
</select>
<input id="sendButton" type="button" value="发送" class="btnCmd" />

上面有个方法getName_encoded()是把name编码后的数据,在list的实体类中被实现,看下面代码片段:
private String name;
public String getName() {
	return name;
}
public String getName_encode() {
	return StringUtil.HexEncode(name);
}


获得选择得到的值(注意是编码后的值),然后发起ajax请求到后台处理
jQuery("#sendButton").click(function() {
	var name_encoded=jQuery("#selection").find("option:selected").val();
	jQuery.ajax({
		dataType: "text",
		type:'POST',
		url: sendurl,
		data: encodeURI('name_encoded='+name_encoded),//实际上这里的encodeURI可以不用了,因为name_encoded是编码后的值,不可能是中文的了
		success:function(msg){
                   //这里处理从后台传回来的数据
			alert(msg);
                        },
		error:function(msg){
			alert("msg="+msg);
                        }
		});
	  });

后台接受到编码了的数据,然后反编码,数据变回中文的了
String name_encoded = request.getParameter("name_encoded");
String name_decode= StringUtil.HexDecode(name_encoded);//已经是中文了
//这里处理name_decode后得到sendData,发送到前台
requestgetWriter().write(sendData);
requestgetWriter().flush();
requestgetWriter().close();


利用这种办法可以解决中文乱码问题。其实原理很简单,就是在传到页面之前先用HexEncode方法把中文编码掉,这样就不会传过去中文了,然后再把编码后的数据传到后台用HexDecode方法反编码,这样又恢复中文了。
下面提供HexEncode和HexDecode方法,我把他们放在了StringUtil类中:
/**
     * Encode string to hex string, hex string can use in url
     * @param str
     * @return hex string
     */
    public static String HexEncode(String str) {
    	String hexString = null;
    	if (str != null && str.length() > 0) {
    		char[] digital = "0123456789ABCDEF".toCharArray();
    		StringBuffer sb = new StringBuffer("");
    		try {
    			byte[] bs = str.getBytes("utf-8");
    			int bit;
    			for (int i = 0; i < bs.length; i++) {
    				bit = (bs[i] & 0x0f0) >> 4;
    				sb.append(digital[bit]);
    				bit = bs[i] & 0x0f;
    				sb.append(digital[bit]);
    			}
    		} catch(Exception e) {
    		}
    		hexString = sb.toString();
    	}
    	
    	return hexString;
    }

    /**
     * Decode hex string
     * @param hexString
     * @return
     */
    public static String HexDecode(String hexString) {
    	String str = null;
    	if (hexString != null && hexString.length() > 0) {
    		String digital = "0123456789ABCDEF";
    		char[] hex2char = hexString.toCharArray();
    		byte[] bytes = new byte[hexString.length() / 2];
    		int temp;
    		for (int i = 0; i < bytes.length; i++) {
    			temp = digital.indexOf(hex2char[2 * i]) * 16;
    			temp += digital.indexOf(hex2char[2 * i + 1]);
    			bytes[i] = (byte)(temp & 0xff);
    		}
    		try {
    			str = new String(bytes, "utf-8");
    		} catch (Exception e) {
    		}
    	}
    	return str;
    }

ps:这些都是我在做对日外包中碰到的问题,因为项目中所有的页面都是
<meta http-equiv="Content-type" content="text/html;charset=Shift_JIS">
编码!
分享到:
评论
4 楼 Relucent 2010-03-31  
我一般是转成 \u0000 格式。

其实转成16进制编码也是好主意 @—_—@
3 楼 yifeng 2010-03-15  
yn5411 写道
我用base64

正解
2 楼 vsover 2010-03-15  
用一些加密解密算法也可以! 
1 楼 yn5411 2010-03-15  
我用base64

相关推荐

    修改Tomcat默认编码消除get方式传递参数出现中文乱码

    本文将深入探讨如何修改Tomcat的默认编码设置,以解决GET方式传递参数时出现的中文乱码问题。 #### Tomcat默认编码解析 默认情况下,Tomcat在处理HTTP请求时,采用的是ISO-8859-1编码,这是一种只支持西欧语言的...

    Jsp页面在URL中传递参数会出现乱码问题解决

    6. **编码转换**:在某些情况下,可能需要进行编码转换,例如在不同编码格式之间进行数据传递时。Java提供了`java.nio.charset.Charset`类和`java.io.InputStreamReader`、`java.io.OutputStreamWriter`等工具进行...

    前后台传值乱码问题万能思想,通用

    "前后台传值乱码问题万能思想,通用"的主题着重于解决这个问题的通用思路,而不是具体的代码实现。以下是对这个主题的详细说明: 首先,我们需要理解“乱码”产生的原因。乱码通常出现在数据在不同字符集之间转换时...

    不同字符编码转换

    不同的字符编码标准用于表示各种语言和特殊符号,确保数据在不同系统间正确传输和显示。这里我们将深入探讨标题和描述中提到的一些主要字符编码格式:UTF-8、UTF-7、ASCII、Unicode以及GB2312,同时还会涉及到大五码...

    几种常用解决jsp中文乱码的方案

    在表单传递过程中,Request.getParameter() 得到的参数,编码方式都是 ISO8859_1,直接按这种编码方法显示中文必然得到乱码。解决办法有两种: 方法一:在标记 &lt;html&gt; 之前,加上一句:("GBK");%&gt;,则对于该网页中...

    Java Web编程中页面跳转乱码问题的解决方案.pdf

    解决乱码问题的策略应根据不同的乱码形式来制定。 解决乱码问题的方法通常包括以下几个方面: 1. 明确项目或服务器端使用的默认编码,并在整个项目中保持一致。 2. 在进行页面跳转时,确保HTTP响应头中的“Content-...

    ajax乱码解决汇总

    JavaScript内部处理字符时,采用的是Unicode编码,这是一种包含几乎全球所有语言字符的通用编码标准。而UTF-8是一种基于Unicode的编码格式,它以1到4个字节来表示一个Unicode字符,对于汉字,通常每个字符占用3个...

    GDAL读取SHP文件完美解决中文无乱码,制做成通用类

    本文将详细介绍如何使用GDAL库在C++环境下,尤其是在Visual Studio(VS)中,读取SHP文件并解决中文乱码问题,同时提供一个通用类的设计思路,使其能够适应不同版本的VS,如VS2010。 首先,我们需要理解GDAL的初始...

    MyEclipse中文乱码问题简单解决方案,不需任何编码转化

    为了解决中文乱码问题,我们可以使用 UTF-8 编码,这是一种通用的 Unicode 编码形式。UTF-8 编码可以正确地表示中文字符,解决了乱码问题。 现在,让我们来看一下解决方案。 1. 在每个页面的开头添加以下代码: ...

    模板编码转换

    模板编码转换涉及将一种编码格式转化为另一种编码格式,以确保数据在不同系统间能够正确地读取和理解。编码是指用特定字符集(如ASCII、UTF-8或GBK)表示文本的方式,而转换则是解决不同系统对字符编码不兼容问题的...

    汉字编码转换器-对文字进行各种编码的工具

    总之,汉字编码转换器是处理中文字符编码问题的有效工具,能够帮助用户解决因编码不匹配而产生的各种问题,确保信息的准确传递和显示。在日常的编程、网页制作或数据处理中,它都扮演着不可或缺的角色。

    解决浏览器请求响应中文文件名乱码问题的小工具包,解决中文文件名问题

    1. **Unicode**:Unicode是一种通用的字符集,包含了世界上大多数语言的文字,确保了不同语言之间的互通性。在计算机系统中,每个字符都有一个唯一的Unicode码点。 2. **字符编码转换**:不同的操作系统、编程语言...

    JSP中文乱码解决

    综上所述,解决JSP中的中文乱码问题,需要从页面编码、请求数据处理和字符编码转换等多个角度进行考虑。通过统一的编码设置和适当的转换函数,可以有效地避免中文乱码的出现,保证应用程序的正常运行。

    jsp 万能解决乱码源码类

    4. **通用性**:为了实现“万能”,这个类应该具有高度的可复用性和灵活性,可以适应不同的环境和需求,比如支持自定义编码映射,或者支持动态配置编码方式等。 5. **Escape编码**:标签中提到了"Escape",这可能是...

    java读取文件中文乱码

    GBK是中文常用的编码格式,而UTF-8是一种更通用的多语言编码格式,能支持更多的字符集。 2. Java默认编码:Java标准库在处理字符串时,默认使用的是平台的默认字符集,这在不同的操作系统上可能不同。例如,Windows...

    jsp过滤器及乱码的解决

    JSP过滤器的使用可以帮助我们有效地处理字符编码,确保数据在不同组件之间的一致性和正确性。本文将详细讲解如何在JSP和数据库操作中使用过滤器来解决乱码问题。 首先,我们要明确一点,解决乱码问题的关键在于统一...

    万能的文件编码转换工具。

    文件编码在信息技术领域中扮演着至关重要的角色,不同的编码方式决定了文本在计算机中的存储和显示方式。本软件“万能的文件编码转换工具...只需简单几步操作,就能实现各种编码间的自由转换,确保信息的准确无误传递。

    查看文件编码格式Demo

    不同的编码格式适用于不同的场景,例如,UTF-8是全球通用的编码,支持多种语言,而GBK是中国大陆常用的编码,主要针对中文字符。 查看文件编码格式的原因有很多。首要的是解决乱码问题,当打开一个文件时,如果选择...

    汉字编码器(exe格式)

    - 转换编码:将不同编码格式的汉字文本互相转换,便于在不同系统或软件间传递。 - 解析文本:帮助程序员理解文本中的汉字编码,解决乱码问题。 5. **使用汉字编码器的注意事项**: - 需要了解目标系统或软件支持...

    解决MySQL客户端输出窗口显示中文乱码问题的办法

    当我们在MySQL客户端查询中文数据时,如果客户端和服务器使用的字符编码不同,数据在传输过程中可能会被错误地解码,从而导致乱码。例如,若服务器默认使用UTF-8编码,而客户端使用的是GB2312编码,由于两者不兼容,...

Global site tag (gtag.js) - Google Analytics