J2EE开发中的乱码问题
中文问题 a,如果是一个静态页面(html),里面有中文,一定要设置 , 并且要保证保存该页面的编码也是 utf-8。 当然,charset也可以 gbk,gb2312。其作用是,模拟 Conent-Type消息头, 告诉浏览器当前返回的页面的编码是什么。 b,在 Servlet类的 service方法里: request.setCha
·
中文问题
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 COLLATE gbk_chinese_ci;
UTF8: CREATE DATABASE test2 DEFAULT CHARACTER SET utf8 COLLATE utf8_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 DEFAULT CHARSET=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文件的时候,一定要在文件的开头写入
,
并且要保证保存该页面的编码也是
当然,charset 也可以
告诉浏览器当前返回的页面的编码是什么。
b,在
request.setCharacterEncoding("utf-8");
其作用是,告诉服务器,以指定的编码格式去解码。
如果Servlet 还要将结果输出到客户端(
response.setContentType("text/html;charset=utf-8");
其作用是:
第一,告诉服务器,输出数据到
第二,生成一个消息头,告诉浏览器,以指定的编码来显示返回的数据。
c,数据库useUnicode=true&characterEncoding=utf8
2)链接地址包含中文:
w3c规定,链接地址,不能出现一些特殊的字符,比如中文,一些拉丁字母等。如果包含了
这样的字符,浏览器会对其进行编码。firefox,ie
用
添加URIEncoding="utf-8"
中文问题(MySql数据库乱码)
1、mysql 建库时设置默认编码:
GBK: CREATE DATABASE test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF8: CREATE DATABASE test2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
;
2、若是已经建好的数据库可使用:
alter database opensource default character set 'utf8';
3、建表时设置默认编码:
create
ENGINE=InnoDB DEFAULT CHARSET=utf8;
4、若是已经建好的数据表可使用:
alter table t_books character SET 'utf8';
5、查看时更改终端编码:
GBK: set names gbk
UTF8: set names utf8
6、连接数据库的
URL 后加:?useUnicode=true&characterEncoding=utf8
3)链接地址包含中文参数:
编码,要看打开该页面的编码是什么。
如果链接地址包含中文,可以使用
不过上面的方法有点太麻烦,给大家个简单的方法(自己添加的):
其他东西都不需要变化,只需要在你的
String essayName = request.getParameter("essayName");
essayName = new String(essayName.getBytes("ISO-8859-1"), "utf-8");
这样,你在地址栏中传入参数essayName的时候就可以完美解决乱码问题了
原因是目前所有的浏览器中的地址解析的编码格式都是默认的
进行解析,然后使用另一种编码格式编码,才能正常显示出来!
有些人认为在项目中设置项目的显示编码就能解决在html或者在jsp页面的显示编码,其实显然,那是错误的,没有任何的相关性,当然,在不同的文件中的编码,上面已经叙述了...请向上看....
在书写jsp文件的时候,一定要在文件的开头写入
更多推荐
已为社区贡献1条内容
所有评论(0)