在一次解决乱码问题中, 发现jsp在windows下用js原生的方法进行编码没有问题,但是到了linux下就有问题, escape,encodeURI,encodeURIComponent等都解决不了问题
但是我想了下既然原生的方法不行,我用el标签的方式对中文参数进行加密解密总该可以吧。于是用了java的java.net.URLDecoder,结果还是乱码,最后在绝望之际,用了下面的方法解决了问题
在EL表达式自定义扩展函数库中的加入
<function>
<description>url字符编码</description>
<name>encodeWord</name>
<function-class>com.miri.boss.comm.util.ELFunction</function-class>
<function-signature>
java.lang.String encodeWord(java.lang.String)
</function-signature>
<example>${f:encodeWord('要编码的字符串')}</example>
</function>
<function>
<description>url字符解码</description>
<name>decodeWord</name>
<function-class>com.miri.boss.comm.util.ELFunction</function-class>
<function-signature>
java.lang.String decodeWord(java.lang.String)
</function-signature>
<example>${f:decodeWord('要解码的字符串')}</example>
</function>
ELFunction.java中写加解密方法
/**
* 对字符串escape编码
*
* @param word
* @return
*/
public static String encodeWord(String word)
{
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(word.length() * 6);
for (i = 0; i < word.length(); i++)
{
j = word.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
tmp.append(j);
else if (j < 256)
{
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
}
else
{
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
/**
* 对escape码进行unescape解码
*
* @param word
* @return
*/
public static String decodeWord(String word)
{
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(word.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < word.length())
{
pos = word.indexOf("%", lastPos);
if (pos == lastPos)
{
if (word.charAt(pos + 1) == 'u')
{
ch = (char) Integer.parseInt(word.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
}
else
{
ch = (char) Integer.parseInt(word.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
}
else
{
if (pos == -1)
{
tmp.append(word.substring(lastPos));
lastPos = word.length();
}
else
{
tmp.append(word.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
在jsp页面中引入
<%@ taglib prefix="ks" uri="http://www.miri.com/elfunction" %>
页面中对中文参数的加密(两次加密)
${ks:encodeWord(ks:encodeWord(programList.channelName))}
页面中对中文参数的解密
${ks:decodeWord(param.channelName)}
分享到:
相关推荐
java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 ...
### JSP中文乱码问题解析 #### 一、引言 在进行Web开发时,特别是使用Java Server Pages(JSP)技术,经常会遇到中文显示乱码的问题。这不仅影响用户体验,也增加了开发与调试的复杂度。本文将针对常见的JSP中文...
总结来说,解决Tomcat下的中文乱码问题,关键在于确保JSP页面的编码与服务器设置一致,并在处理表单提交时正确设置请求的字符编码。在实际开发中,推荐使用UTF-8作为统一的编码标准,因为UTF-8能够兼容各种语言,...
JSP 页面中的字符编码方式与乱码解决方法 在 JSP 中,字符编码方式的设置是非常重要的,因为它直接影响着页面的显示效果。如果不正确地设置字符编码方式,可能会出现乱码问题。下面我们将详细介绍 JSP 中的字符编码...
在本案例中,开发者在Windows环境下开发的应用在Linux服务器上出现了乱码问题。 首先,开发者尝试了常见的解决乱码问题的方法,包括在JSP页面中设置contentType指定字符集(如`;charset=gb2312">`),使用ISO-8859-...
但在英文系统环境下,例如LANG设置为en_US的Linux、AIX或Solaris,需要将JVM的`file.encoding`设置为GBK,以防止乱码。 2. **Java编译**:JSP被编译为Java源文件,此过程同样受到`file.encoding`的影响。无论JSP...
对于Linux或Unix系统,推荐使用UTF-8编码。可以使用Java的`new String(fileBytes, "UTF-8")`来转换文件名的编码。 4. **JSP页面设置**:在JSP页面中,也需要设置页面编码为UTF-8,通常在页面顶部添加以下声明: ```...
### 解决JSP乱码问题详解 在Web开发过程中,特别是在使用Java Server Pages(JSP)进行页面渲染时,字符编码问题常常导致页面显示乱码。本文将详细探讨如何有效地解决JSP页面中的乱码问题,并提供一些实用的解决...
大多数浏览器默认使用UTF-8编码传递参数,因此,服务器端接收中文参数时,需确保正确解码,如使用URLEncoder/URLDecoder进行编码解码。 总结,Java中文乱码问题涉及多个层面,包括源文件编码、编译过程、执行环境...
JSP中文问题的出现往往与编码环境的不一致有关,这包括操作系统、J2EE容器、数据库系统和JDBC驱动等多方面因素。要解决这类问题,开发者需要对“上下文环境”有清晰的了解。 1. 分析乱码问题: 首先,开发者要确定...
项目进行到和服务器交互,通过post访问服务器端jsp,jsp访问服务器端mysql数据库,最终返回到客户端的中文出现乱码问题。 在整个流程中,出现错误的原因可能是三个:post未设置编码或者编码不相符合,jdbc出现问题,...
通过以上步骤,我们可以确保在不同的操作系统(如Win2000、Unix、Linux)和Web服务器(如Tomcat、WebSphere)环境下,使用SmartUpload上传和下载中文附件时,文件名都不会出现乱码问题。关键在于正确处理文件名的...
在使用Apache Tomcat服务器的过程中,有时会遇到中文乱码的问题,这主要表现为在日志输出、控制台打印或者Web应用中的请求参数、响应内容显示不正常,出现问号或者其他非中文字符。这个问题通常是由于字符编码设置不...
4. **环境变量调整**:如果是在Linux环境下部署,可能还需要修改环境变量,如通过编辑`/etc/sysconfig/i18n`文件来设置正确的系统语言环境。 5. **日志排查**:当遇到乱码问题时,首先查看服务器日志,尝试找到乱码...
例如,在Windows系统下,文件系统的默认编码通常为GBK或GB2312,而在Linux系统下,则可能是UTF-8或ISO-8859-1。 针对这种情况,可以采取以下措施: - 在Windows环境下,直接使用GBK或GB2312进行编码转换。 - 在...
4. 浏览器通常使用UTF-8编码来传递参数,与某些系统或程序使用的编码格式不一致,这也可能导致中文乱码。 5. 不同类型的Java程序(如Console应用、JSP、Servlets、EJB等)在接收和输出中文字符时,都会涉及编码和...
使用Java语言开发,利用了Java的跨平台性,使得论坛可以在多种操作系统上运行,如Windows、Linux、Unix等。 2. **JSP技术**:JSP(Java Server Pages)是Java服务器端的动态网页技术,它将HTML代码与Java代码相...