J2EE开发中的乱码问题

来源:互联网 发布:海岛奇兵小怪升级数据 编辑:程序博客网 时间:2024/04/17 03:40
中文问题
  a,如果是一个静态页面(html),里面有中文,一定要设置 

并且要保证保存该页面的编码也是  utf-8。 
当然,charset也可以  gbk,gb2312。其作用是,模拟  Conent-Type消息头, 
告诉浏览器当前返回的页面的编码是什么。 
b,在  Servlet类的  service方法里: 
request.setCharacterEncoding("utf-8"); 
其作用是,告诉服务器,以指定的编码格式去解码。 
如果Servlet还要将结果输出到客户端(  浏  览  器  ),还需要: 
response.setContentType("text/html;charset=utf-8"); 
其作用是: 
第一,告诉服务器,输出数据到  PrintWriter时,所采用的编码格式; 
第二,生成一个消息头,告诉浏览器,以指定的编码来显示返回的数据。 
c,数据库useUnicode=true&characterEncoding=utf8 
2)链接地址包含中文: 
w3c规定,链接地址,不能出现一些特殊的字符,比如中文,一些拉丁字母等。如果包含了 
这样的字符,浏览器会对其进行编码。firefox,ie  都采用  utf-8进行编码;服务器默认采 
用  iso-8859-1  解码  。对于  tomcat,可  以修改  tomcat_home/conf/server.xml文件 
添加URIEncoding="utf-8" 

中文问题(MySql数据库乱码) 
1、mysql 建库时设置默认编码: 
GBK: CREATE DATABASE test2 DEFAULT CHARACTER SET gbk COLLATEgbk_chinese_ci;  
UTF8: CREATE DATABASE test2 DEFAULT CHARACTER SET utf8 COLLATEutf8_general_ci; 
;
2、若是已经建好的数据库可使用: 
alter database opensource default character set'utf8'; 
3、建表时设置默认编码: 
create  table  t_pic(id  bigint  primary  key  auto_increment,picName  varchar(100),  userId  bigint) 
ENGINE=InnoDB DEFAULTCHARSET=utf8; 
4、若是已经建好的数据表可使用: 
alter table t_books character SET'utf8'; 
5、查看时更改终端编码: 
GBK: set names gbk 
UTF8: set names utf8 
6、连接数据库的  url: 
URL 后加:?useUnicode=true&characterEncoding=utf8

3)链接地址包含中文参数:  浏览器会对链接地址中的中文参数进行编码,具体采用哪一种 
编码,要看打开该页面的编码是什么。 
如果链接地址包含中文,可以使用  URLEncoder.encode()对中文参数进行编码。 
不过上面的方法有点太麻烦,给大家个简单的方法(自己添加的):
其他东西都不需要变化,只需要在你的  servlet  文件,即java客户端文件中改为下面的方式就行了
String essayName =request.getParameter("essayName");
essayName = new String(essayName.getBytes("ISO-8859-1"),"utf-8");
这样,你在地址栏中传入参数essayName的时候就可以完美解决乱码问题了

原因是目前所有的浏览器中的地址解析的编码格式都是默认的  ISO-8859-1编码格式,必须在服务器接收端对输出的乱码
进行解析,然后使用另一种编码格式编码,才能正常显示出来!

有些人认为在项目中设置项目的显示编码就能解决在html或者在jsp页面的显示编码,其实显然,那是错误的,没有任何的相关性,当然,在不同的文件中的编码,上面已经叙述了...请向上看....
在书写jsp文件的时候,一定要在文件的开头写入
原创粉丝点击