Web应用中的中文问题
来源:互联网 发布:arduino图形化编程软件 编辑:程序博客网 时间:2024/06/05 16:33
Web应用中的中文问题
1. 静态页面中文信息不能正确显示
浏览器端看到中文不能正确显示,首先应该检查浏览器是否支持中文,浏览器的编码是否设置正确.为保证静态页面中文信息正确显示可以在HTML <HEAD> 部分增加:
里的中文提示信息不能正确显示
JSP里的中文提示信息不能正常显示,最直接的原因是WebLogic的预设字符集不是汉字字符集(Weblogic8.1里是setlocal,Weblogic7.0sp3,sp4为UTF-8),因此可以在JSP页面中设置字符集,加入如下脚本:这种做法需要对每个JSP页面进行设置,下面的做法针对所有的jsp页面进行设置,比较通用.
3. JSP文件中的提示信息不能正确编译
JSP文件中的提示信息正确编译,可以在weblogic.xml里设置如下脚本,同时也可以解决上面说的第二个问题:文件之间不能正确传递中文数据
JSP文件之间不能正确传递中文资料,可以有两种方法解决.
其一:在web.xml里加上如下脚本::.
以上都没有涉及到数据库操作,所以当出现乱码时,逐一分析,
必能找到问题所在.另外可能还需要修改WebLogic应用服务器所在操作系统的字符集,确保支持中文.
2. JSP
<jsp-param>
<param-name>compileCommand</param-name>
<param-value>javac</param-value>
</jsp-param>
<jsp-param>
<param-name>compilerSupportsEncoding</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</jsp-param>
</jsp-descriptor>
4. JSP
<param-name>weblogic.httpd.inputCharset./*</param-name>
<param-value>GBK</param-value>
</context-param>
其二:在weblogic.xml里加上如下脚本
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>GBK</java-charset-name>
</input-charset>
</charset-params>
当然这种问题也可以自己用java.net.URLEncoder和java.net.URLDecoder来处理中文
文件名和目录中的中文问题
如果你的文件名或者目录是中文怎么办呢?上面提到的方法不能解决你的问题了.这时需要使用java.net.URLEncoder编码.举个例子,在test.jsp里,你需要提供一个超链接到 ./测试/测试.jsp,你可以这么写:JDBC中的中文问题
如果以上的方法还不能解决你的乱码问题,那么可能是JDBC操作中的失误.这里以Oracle9I为例来说明jdbc中的中文问题.首先查询数据库:
select * from v where parameter='NLS_CHARACTERSET';
得到数据库的字符集,如果ZHS16GBK,则JDBC的操作不需要转码;如果是us7ascii,则需要转码或者作相关设定.下面以使用不同的数据库驱动程序为例来介绍.
1. 使用Thin Driver
如果使用Thin Driver,那么需要在查询数据库的时候将字符集由ISO转换为GBK,写入数据库的时候将字符集由GBK转换为ISO.
举个例子:
插入一条记录: 查询一条记录:
是否转码,以增加应用的移植性.
2.使用OCI Driver
直接使用WebLogic提供的driver,在设定连结池时设置Properties属性:
weblogic.codeset=GBK,如下图所示:
当你采用了上面的两个方法还不能解决你的乱码时,你检查一下是否仅仅是孤僻字不能正常显示呢?这种情况你需要使用oracle的字符集包: nls_charset12.zip,将该包加入到WebLogic classpath中.
PreparedStatement pstmt = null;
try ...{
String strSql="insert into tabA(A,B) values('1111','王超')";
conn=ds.getConnection();
strSql = new String(strSql.getBytes("GBK"), "ISO-8859-1");
pstmt = conn.prepareStatement(strSql);
pstmt.executeUpdate();
}
catch (Exception e) ...{
//logger.error(e, e);
}
finally ...{
disconn(conn, pstmt);
}
PreparedStatement pstmt = null;
ResultSet rs=null;
try ...{
String strSql="select B from tabA where A='1111'";
conn=ds.getConnection();
strSql = new String(strSql.getBytes("GBK"), "ISO-8859-1");
pstmt = conn.prepareStatement(strSql);
rs=pstmt.executeQuery();
String strB;
if (rs.next())...{
strB=new String(rs.getString(1) .getBytes("ISO-8859-1"), "GBK");
}
catch (Exception e) ...{
//logger.error(e, e);
}
finally ...{
disconn(conn, pstmt, rs);
}这里建议你在属性文件里设置oracle字符集,根据字符集判断
加密中的中文问题
对于不含中文信息的加密和解碼,我想有很多算法可以实现.但由于中文为两个字符,普通的加密算法在一次加密一次解密之后无法复原.采用BASE64对中文信息进行编码后再加密可以轻松解决这个问题.当然解密之后同样需要用BASE64解碼.示例如下:
System.out.println(pw);
pw=new sun.misc.BASE64Encoder().encode(pw.getBytes());
System.out.println(pw);
//加密
String pw1=encode(pw);
System.out.println(pw1);
//解密
String pw2=decode(pw1);
System.out.println(pw2);
byte[] bt=new sun.misc.BASE64Decoder().decodeBuffer(pw2);
pw2=new String(bt);
System.out.println(pw2);
- Web应用中的中文问题
- Web应用中的中文问题
- Web应用中的中文乱码问题
- java WEB应用中的中文乱码问题初探
- Web应用中的中文本地化
- web应用中文字符问题
- 深入浅出java中文问题(四)Web应用中的中文问题
- web开发中的中文问题
- web应用中的路径问题
- web应用中的路径问题
- web应用中的路径问题
- web应用中的路径问题
- web应用开发中中文乱码问题
- JAVA WEB应用开发中的中文问题 之一 字符串的输入
- 由web应用中的下载中的问题
- java web开发中的中文显示问题
- 解决web开发中的中文问题。
- 解决web开发中的中文问题
- j2me入门-symbian os support for MIDP
- linux2.6内核epoll用法举例说明
- C#3.0都出来了!
- SQL查询重复记录
- Linux - rc.d
- Web应用中的中文问题
- 详解JAVA语言中的访问控制
- 浪漫情书
- 安装asp.net ajax 1.0 遇到的麻烦
- Java的常用方法说明
- vb数据库学习笔记
- 中日韩大字符集文字编码的比较研究
- 什么是Biztalk
- 修改mysql root密码