Solaris上中文请求乱码
项目概况:
过滤器使用GBK处理中文
对于汉字,使用Post方式没有乱码,使用get方式在Solaris平台上的Weblogic服务器出现乱码。
环境
WinXP+Tomcat5.5.28
OS 名称: Microsoft Windows XP Professional
OS 版本: 5.1.2600 Service Pack 3 Build 2600
没有乱码现象出现。
Solaris平台出现乱码
root@portalA # locale
LANG=zh_CN.GBK
LC_CTYPE=”zh_CN.GBK”
LC_NUMERIC=”zh_CN.GBK”
LC_TIME=”zh_CN.GBK”
LC_COLLATE=”zh_CN.GBK”
LC_MONETARY=”zh_CN.GBK”
LC_MESSAGES=”zh_CN.GBK”
LC_ALL=
root@portalA # uname -a
SunOS portalA 5.10 Generic_120011-14 sun4u sparc SUNW,Sun-Fire-15000
root@portalA #
上中文出现乱码;
解决方法如下:
1、 前台传值的时间,对URL进行编码
2、 后台获取时,采用URLDecoder类进行解码而已
JavaScript
中的处理
function printImag(){
var url = “/JsjxzlpgAction.do?method=queryPrint&yxsh=”+”中文汉字”;
url=encodeURI(encodeURI(url));
window.open(url, ‘数据表’, “location=no,menubar=no,resizable=yes,
scrollbars=yes,status=yes,titlebar=no,toolbar=no”);
}
测试代码:
<html>
<body>
<script type=”text/javascript”>
var url=”/JsjxzlpgAction.do?method=queryPrint&yxsh=”+”中文汉字”;
document.write(encodeURI(url)+ “<br />”);
document.write(encodeURI(encodeURI(url))+”<br />”);
document.write(encodeURI(“,/?:@&=+$#”));
</script>
</body>
</html>
输出如下:
/JsjxzlpgAction.do?method=queryPrint&yxsh=%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97
/JsjxzlpgAction.do?method=queryPrint&yxsh=%25E4%25B8%25AD%25E6%2596%2587%25E6%25B1%2589%25E5%25AD%2597
,/?:@&=+$#
encodeURI函数的再一次处理就是对特殊字符,例如%编码成%25
Java
中的处理
String yxsh =
java.net.URLDecoder.decode
(request.getParameter(“yxsh”) , “UTF-8″);
使用Java
String str = “/JsjxzlpgAction.do?method=queryPrint&yxsh=” + “中文汉字”;
String encoding = “utf-8″;
String strEnc=java.net.URLEncoder.encode
(str, encoding);
System.out
.println(strEnc);
System.out
.println(java.net.URLDecoder.decode
(strEnc,encoding));
输出结果如下:
%2FJsjxzlpgAction.do%3Fmethod%3DqueryPrint%26yxsh%3D%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97
/JsjxzlpgAction.do?method=queryPrint&yxsh=中文汉字
进一步测试:
String str2=”%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97″;
System.out
.println(java.net.URLDecoder.decode
(str2,encoding)); str2=”%25E4%25B8%25AD%25E6%2596%2587%25E6%25B1%2589%25E5%25AD%2597″;
System.out
.println(java.net.URLDecoder.decode
(str2,encoding));
输出结果如下:
中文汉字
%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97
可见java.net.URLDecoder.decode
(str2,” utf-8”)的本质意义就是将%XX%XX的字符串表示按utf-8来进行解码。
当时冒似是在URL后面带上了这样的参数:
“parm=《%=java.net.URLEncoder.encode(parm,”utf-8″)%>”
然后在JAVA里取出来:
String mytext2 = java.net.URLDecoder.decode(request.getParameter(PARM), “utf-8″);
最终通过这种方式进行了处理。
主要是关注encodeURI函数和URLEncoder和URLDecoder类,来进行数据处理。
Reference
http://bbs.firnow.com/dview37t16452.html
http://hi.baidu.com/%B4%FA%CD%E9/blog/item/b195d554158ba45f574e005e.html
http://www.javaeye.com/topic/456553
http://yiminghe.javaeye.com/blog/243812
http://www.w3school.com.cn/js/jsref_encodeURI.asp
分享到:
相关推荐
Java 乱码问题是 Java 开发中常见的问题之一,解决这个问题需要了解 Java 的编码方式、JSP 中文乱码问题、Tomcat 5.5 中文乱码问题、JDBC ODBC Bridge 的 Bug 及其解决方法、Solaris 下 Servlet 编程的中文问题及...
4. **URL编码**:GET或POST请求中的汉字可能会导致乱码,因为SUN的J2SDK在解析参数时未考虑浏览器的编码设置。为解决这个问题,Servlet API 2.3引入了`HttpServletRequest.setCharacterEncoding`方法,允许在获取...
综上所述,Java开发中的中文处理问题主要涉及字符编码的转换和设置,以及与数据库的兼容性。通过理解Unicode编码机制,正确设置编码参数,以及适时进行字符转换,可以有效地解决这些问题,确保中文信息在应用程序中...
- 在Unix/Linux/Solaris等非Windows平台上部署JSP应用时,应特别注意本地化设置,确保与中文字符集的兼容。 - 使用最新的JDK版本和应用服务器,它们通常提供更全面的国际化支持。 - 考虑采用更通用的编码方案,如UTF...
其次,当在Solaris环境下进行Servlet编程时,可能会遇到中文显示为乱码的问题。这是因为Servlet默认使用ISO8859-1编码,而中文通常需要GB2312或GBK编码。为了解决这个问题,我们需要在响应给客户端的数据前,明确...
为了避免中文乱码,应创建一个`OutputStreamWriter`,指定合适的字符编码(如UTF-8),然后通过`write()`方法写入内容。 这些知识点涵盖了Java环境配置、开发工具选择、Applet调试、JDBC操作数据库时的字符编码问题...
在Solaris平台上,设置环境变量的方式是`setenv JAVA_HOME Java2的安装路径`和`setenv PATH $JAVA_HOME/bin:${PATH}`;在Windows上,命令则是`set JAVA_HOME=Java2的安装路径`和`set PATH=$JAVA_HOMEbin;%PATH%`。 ...
DB2 Everyplace产品线支持Linux和Solaris操作系统,体现了IBM在跨平台解决方案上的广泛兼容性。 总而言之,根据给定的文件信息,可以推断出“Everyplace Express Edition”是IBM DB2 Everyplace产品线中的一个简化...
对于Solaris平台,可以通过`setenv JAVA_HOME`来设置Java2的安装目录,然后更新路径变量`setenv PATH $JAVA_HOME/bin:$PATH`。在Windows平台上,则通过`set JAVA_HOME=Java2安装路径`来设置,并更新路径变量`set ...
在Servlet处理HTTP请求并返回HTML页面时,为了正确显示中文等非英文字符,必须设置正确的字符编码。这通常通过`HttpResponse`对象的`setContentType`方法来指定响应的MIME类型及编码,例如`"text/html;charset=UTF-8...