首页 > 学技术 > 技术网文 > MySQL > 正文

[保留] linux下乱码问题的终极解决方法!


来源 chinaunix.net 酷勤网整理

在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




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=732610

收藏到: