在linux下搭建网站的时候,乱码问题困扰了我差不多一个星期,后来终于解决了。
我的体会就是:应用必须和数据库的字符集(编码)相一致。
具体地说,就是,如果你想使用gb2312编码,那就要保证:每一个jsp文件都是以gb2312编码存储的(在保存文件的时候选择gb2312编码就可以了),另外,文件头还要定义<%@ page contentType="text/html; charset=gb2312" %>;关于数据库,创建数据库时就要定义编码,例如:create database mysql default character set gb2312 collate gb2312_chinese_ci;最后要做得就是,连接数据时,在相关文件中加入以下代码:useUnicode=true&characterEncoding=gb2312。
要补充说明的是,在linux下,其实不用选择gb2312,我都用的是utf8,当然也需要按照以上步骤进行设置,肯定不会出现乱码!个人喜好,大家随意!
之前我试了很多方法,比如在/etc/sysconfig/i18n文件中改系统字体,在/etc/my.cnf中[mysqld]字段后加入如下语句default-character-set=gb2312等等,我觉得没有必要。
以上步骤看似很简单,但是我的失败教训,也是我的成功心得。现在与大家分享,看后有收获的,不顶一下就是你的不厚道了!
chenyouji 回复于:2006-04-06 17:36:16
忘了,还有很关键的一点,jdbc千万要用适合的版本,之前我用的是3.0.9,发现不行,后来换用了3.0.16,就没问题了。
xxjoyjn 回复于:2006-04-06 18:07:47
顺便问一下,怎么决定JSP页面的存储编码?比如用txt,EditPlus等?
xxjoyjn 回复于:2006-04-06 18:13:30
我说的这两个编辑器好像都没有这个功能呀
xxjoyjn 回复于:2006-04-06 18:23:23
LZ的那句:create database mysql default character set gb2312 collate gb2312_chinese_ci
好像有问题,至少我试验时,老是报错哟
ideawu 回复于:2006-04-06 19:58:59
楼主所提到的JSP文件的写法和保存方法都是基本要求,就跟写HTML要写声明编码的标签并且必须放在title标签前面一样,只不过有不少人连基本的东西都不知道而已。
xxjoyjn 回复于:2006-04-06 20:32:33
在JSP里面申明编码很简单<%@ page contenttype="text/html;charset=gbk"%>
可LZ说的页面的存储编码我就不知道怎么做了,说实在了,我的编辑器好像都没有这个功能也!
rardge 回复于:2006-04-06 20:40:54
引用:原帖由 xxjoyjn 于 2006-4-6 18:23 发表
LZ的那句:create database mysql default character set gb2312 collate gb2312_chinese_ci
好像有问题,至少我试验时,老是报错哟
呵呵,这个需要你把数据库升级到 4.1.1 版本以上。
xxjoyjn 回复于:2006-04-06 20:49:44
原来如此!
chenyouji 回复于:2006-04-07 07:28:14
引用:原帖由 ideawu 于 2006-4-6 19:58 发表
楼主所提到的JSP文件的写法和保存方法都是基本要求,就跟写HTML要写声明编码的标签并且必须放在title标签前面一样,只不过有不少人连基本的东西都不知道而已。
WU说的对,其实编码转换不是什么高深的问题,大家只要明白了一些规范,并认真执行,就不会出现编码问题!
另外,关于保存选时选择编码的问题,我是在linux下保存的,可以选择"gb2312"编码;至于在Windows下,用记事本,默认ANSI编码就是了。
yejr 回复于:2006-04-07 08:50:38
多谢lz共享经验,保留此帖。
xxjoyjn 回复于:2006-04-07 09:28:12
引用:原帖由 chenyouji 于 2006-4-6 17:33 发表
在linux下搭建网站的时候,乱码问题困扰了我差不多一个星期,后来终于解决了。
我的体会就是:应用必须和数据库的字符集(编码)相一致。
具体地说,就是,如果你想使用gb2312编码,那就要保证:每 ...
在/etc/my.cnf里面设置字符集真的就没有必要吗?如果你在编译MYSQL时用了
configure --with-charset=gb2312,或者在创建数据库的时候指定了字符集为gb2312,那么
可以说就没有必要在my.cnf里设置字符集,否则,如rardge所说在my.cnf设置字符集就当然必要了,
我觉得LZ还是没有把这个问题从本质上阐述清楚,让初学者仍然有点模糊的感觉,或者说没有初学者
真正明白其中的缘由。
chenyouji 回复于:2006-04-07 16:45:02
引用:原帖由 xxjoyjn 于 2006-4-7 09:28 发表
在/etc/my.cnf里面设置字符集真的就没有必要吗?如果你在编译MYSQL时用了
configure --with-charset=gb2312,或者在创建数据库的时候指定了字符集为gb2312,那么
可以说就没有必要在my.cnf里设置字符集,否 ...
我觉得在/etc/my.cnf里设置字符集没有必要,因为你可以在每一次创建数据库的时候给它制定字符集,例如:create database mysqldata default character set gb2312 collate gb2312_chinese_ci,如果你不嫌麻烦的话,嗬嗬!
还有,我认为在linux下最好指定utf8字符集,因为浏览器默认的转码字符集就是utf8,这可以省去很多麻烦!
rardge 回复于:2006-04-07 17:03:44
引用:原帖由 chenyouji 于 2006-4-7 16:45 发表
我觉得在/etc/my.cnf里设置字符集没有必要,因为你可以在每一次创建数据库的时候给它制定字符集,例如:create database mysqldata default character set gb2312 collate gb2312_chinese_ci,如果你不嫌麻 ...
就是因为这个原因,才一次性在配置文件中写入server的字符集环境,然后让数据库、数据表、字段去继承。
你想啊,每次可以节省多少字符输入啊。
现在呢,推荐都使用utf8,也不要用gb2312了。
diogin 回复于:2006-04-07 19:33:36
呵呵,设置my.cnf里为UTF-8后,再把php文件存为UTF-8编码,就可以直接连MySQL而不用发送查询"set names utf8"了,可以正常显示中文,就像mysql 4.0.x一样。
xxjoyjn 回复于:2006-04-07 20:58:11
有些东西是要多争论,才会得出事实的真相
leixinren 回复于:2006-04-08 01:37:51
多谢楼主的总结!
bjchenxu 回复于:2006-04-11 09:15:42
非常感谢lz的总结,其实,这个问题应该在java版讨论的,呵呵
我也建议使用utf8编码来解决问题,和lz的结论相同,至于用什么编辑器来做utf8,linux下我建议使用eclipse,编辑器中默认就使用utf8,可以免除各种不必要的麻烦
gothicane 回复于:2006-05-08 22:44:34
虽然没用过,但还是要顶~~
charloco 回复于:2006-05-09 09:03:42
Thanks
litrin 回复于:2006-05-18 11:02:14
引用:原帖由 xxjoyjn 于 2006-4-6 18:07 发表
顺便问一下,怎么决定JSP页面的存储编码?比如用txt,EditPlus等?
我用UltraEdit.
jiangjiazeng 回复于:2006-05-19 09:34:14
对于latin1和utf8来说都不会有问题,不过对于gbk来说的话就不行了,还有对于latin1和utf8来说,中文单字符搜索不是很精确,我的开发环境是win2000 simple chinese,数据库环境为linux!mysql版本为5.0.19
seaway 回复于:2006-05-19 11:03:03
utf8全搞定了。要那么复杂吗?
B2CPC 回复于:2006-05-20 00:46:40
新手求助:我下载的文件里边全是乱码(文件是繁体中文),请问有什么好方法解决吗?
rardge 回复于:2006-05-20 01:59:25
引用:原帖由 B2CPC 于 2006-5-20 00:46 发表
新手求助:我下载的文件里边全是乱码(文件是繁体中文),请问有什么好方法解决吗?
你什么意思?简体系统,但要编辑文件是繁体的?
用转换软件转换该文件的编码(big5->gb2312),或者把系统切换到繁体系统,打开该文件,在不是乱码的情况下另存为 utf-8 编码,再切换回简体中文系统。
xxjoyjn 回复于:2006-05-20 09:17:03
引用:原帖由 rardge 于 2006-5-20 01:59 发表
你什么意思?简体系统,但要编辑文件是繁体的?
用转换软件转换该文件的编码(big5->gb2312),或者把系统切换到繁体系统,打开该文件,在不是乱码的情况下另存为 utf-8 编码,再切换回简体中文系统。
请问rardge,你知道常用的转码软件是什么?能提供吗
B2CPC 回复于:2006-05-21 02:09:47
我这样试过了,可惜在繁体系统下还是没有显示正确字体,出来的还是乱码.:(
不知道还有什么方法,谢谢
seaway 回复于:2006-05-24 11:00:59
是个方法,但是叫终级的话过了.容易误导观众
yefenghaoleng 回复于:2006-05-25 11:11:30
哈哈:)也是
daigang 回复于:2006-06-05 16:59:42
表误人子弟,请LZ在搞清楚点
表只看表象,还要研究实质的
lvDbing 回复于:2006-06-06 03:21:00
gb2312 和 utf8 有什么区别
Jython 回复于:2006-10-16 11:19:46
安装了mysql-standard-5.0.26-solaris8-sparc.pkg.gz版本,
在执行create database zus default character set gb2312 collate gb2312_chinese_ci的时候出错:
ERROR 1115 (42000): Unknown character set: 'gb2312'
ming991316 回复于:2007-03-21 22:54:01
枝术贴,顶一下先~~!
新手,请指点一下~
一切都是零的开头~~:lol:
溺水鱼鳞 回复于:2007-03-21 23:12:06
我顶下,顶到你爽
likuku 回复于:2007-03-22 14:35:57
引用:原帖由 Jython 于 2006-10-16 11:19 发表
安装了mysql-standard-5.0.26-solaris8-sparc.pkg.gz版本,
在执行create database zus default character set gb2312 collate gb2312_chinese_ci的时候出错:
ERROR 1115 (42000): Unknown character set: ...
可能是这个 2进制发行包 在编译时不包括 GB2312 字符集。你最好下载源代码自己编译。
./configure --with-charset=gb2312 --with-extra-charsets=all
gmake
gmake install
|