有时候我们在使用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="" > </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">
编码!
分享到:
相关推荐
本文将深入探讨如何修改Tomcat的默认编码设置,以解决GET方式传递参数时出现的中文乱码问题。 #### Tomcat默认编码解析 默认情况下,Tomcat在处理HTTP请求时,采用的是ISO-8859-1编码,这是一种只支持西欧语言的...
6. **编码转换**:在某些情况下,可能需要进行编码转换,例如在不同编码格式之间进行数据传递时。Java提供了`java.nio.charset.Charset`类和`java.io.InputStreamReader`、`java.io.OutputStreamWriter`等工具进行...
"前后台传值乱码问题万能思想,通用"的主题着重于解决这个问题的通用思路,而不是具体的代码实现。以下是对这个主题的详细说明: 首先,我们需要理解“乱码”产生的原因。乱码通常出现在数据在不同字符集之间转换时...
不同的字符编码标准用于表示各种语言和特殊符号,确保数据在不同系统间正确传输和显示。这里我们将深入探讨标题和描述中提到的一些主要字符编码格式:UTF-8、UTF-7、ASCII、Unicode以及GB2312,同时还会涉及到大五码...
在表单传递过程中,Request.getParameter() 得到的参数,编码方式都是 ISO8859_1,直接按这种编码方法显示中文必然得到乱码。解决办法有两种: 方法一:在标记 <html> 之前,加上一句:("GBK");%>,则对于该网页中...
解决乱码问题的策略应根据不同的乱码形式来制定。 解决乱码问题的方法通常包括以下几个方面: 1. 明确项目或服务器端使用的默认编码,并在整个项目中保持一致。 2. 在进行页面跳转时,确保HTTP响应头中的“Content-...
JavaScript内部处理字符时,采用的是Unicode编码,这是一种包含几乎全球所有语言字符的通用编码标准。而UTF-8是一种基于Unicode的编码格式,它以1到4个字节来表示一个Unicode字符,对于汉字,通常每个字符占用3个...
本文将详细介绍如何使用GDAL库在C++环境下,尤其是在Visual Studio(VS)中,读取SHP文件并解决中文乱码问题,同时提供一个通用类的设计思路,使其能够适应不同版本的VS,如VS2010。 首先,我们需要理解GDAL的初始...
为了解决中文乱码问题,我们可以使用 UTF-8 编码,这是一种通用的 Unicode 编码形式。UTF-8 编码可以正确地表示中文字符,解决了乱码问题。 现在,让我们来看一下解决方案。 1. 在每个页面的开头添加以下代码: ...
模板编码转换涉及将一种编码格式转化为另一种编码格式,以确保数据在不同系统间能够正确地读取和理解。编码是指用特定字符集(如ASCII、UTF-8或GBK)表示文本的方式,而转换则是解决不同系统对字符编码不兼容问题的...
总之,汉字编码转换器是处理中文字符编码问题的有效工具,能够帮助用户解决因编码不匹配而产生的各种问题,确保信息的准确传递和显示。在日常的编程、网页制作或数据处理中,它都扮演着不可或缺的角色。
1. **Unicode**:Unicode是一种通用的字符集,包含了世界上大多数语言的文字,确保了不同语言之间的互通性。在计算机系统中,每个字符都有一个唯一的Unicode码点。 2. **字符编码转换**:不同的操作系统、编程语言...
综上所述,解决JSP中的中文乱码问题,需要从页面编码、请求数据处理和字符编码转换等多个角度进行考虑。通过统一的编码设置和适当的转换函数,可以有效地避免中文乱码的出现,保证应用程序的正常运行。
4. **通用性**:为了实现“万能”,这个类应该具有高度的可复用性和灵活性,可以适应不同的环境和需求,比如支持自定义编码映射,或者支持动态配置编码方式等。 5. **Escape编码**:标签中提到了"Escape",这可能是...
GBK是中文常用的编码格式,而UTF-8是一种更通用的多语言编码格式,能支持更多的字符集。 2. Java默认编码:Java标准库在处理字符串时,默认使用的是平台的默认字符集,这在不同的操作系统上可能不同。例如,Windows...
JSP过滤器的使用可以帮助我们有效地处理字符编码,确保数据在不同组件之间的一致性和正确性。本文将详细讲解如何在JSP和数据库操作中使用过滤器来解决乱码问题。 首先,我们要明确一点,解决乱码问题的关键在于统一...
文件编码在信息技术领域中扮演着至关重要的角色,不同的编码方式决定了文本在计算机中的存储和显示方式。本软件“万能的文件编码转换工具...只需简单几步操作,就能实现各种编码间的自由转换,确保信息的准确无误传递。
不同的编码格式适用于不同的场景,例如,UTF-8是全球通用的编码,支持多种语言,而GBK是中国大陆常用的编码,主要针对中文字符。 查看文件编码格式的原因有很多。首要的是解决乱码问题,当打开一个文件时,如果选择...
- 转换编码:将不同编码格式的汉字文本互相转换,便于在不同系统或软件间传递。 - 解析文本:帮助程序员理解文本中的汉字编码,解决乱码问题。 5. **使用汉字编码器的注意事项**: - 需要了解目标系统或软件支持...
当我们在MySQL客户端查询中文数据时,如果客户端和服务器使用的字符编码不同,数据在传输过程中可能会被错误地解码,从而导致乱码。例如,若服务器默认使用UTF-8编码,而客户端使用的是GB2312编码,由于两者不兼容,...