关于??乱码,是系统相关的各个环节之间进行代码转换出现的问题,比如在shell下用mysql这个程序对数据库进行恢复,mysql会错误的把代码进行转换,导致乱码出现, 用mysqldump把数据从mysql4.0中导出,此时得到的sql文件应该是gb2312的,然后用iconv这个程序把sql文件改为utf8 导出一个mysql4.0的库(服务器:192.168.2.2 库名:dbname): 修改/etc/mysq1/my.cnf,在[mysqld]和[mysql]各增加1行:
在mysql4.1下,一些数据库里面的中文会出现??乱码现象.因为,4.1增加了对utf8的支持,这是件好事.但是,问题是大部分的程序,都是使用的gb2312/gbk这样的编码格式,如果把它们都改成utf8格式,要转换成utf8需要解决的事情比较多.编辑器,浏览器,mysql-server,mysql-client,php,php-mysql,cvs代码管理,数据库备份,还有合适的gb2312到utf8的转换工具.诸多的环节需要考虑.
数据库的格式转换,文件程序的格式转换,和mysql-server的设置情况记录一下.
当然真正的转换,现在还没有做,现在只是做点规划.
在转换之前,我们一定要清楚,文件是什么格式,数据库内部是什么格式,都要统一到utf8下来,不对的要进行格式转换.
1.数据库的转换.
以前数据库里面的字符,应该都是gb2312格式,这时,需要把所有的数据库文件导出成sql文本,然后对文本进行utf-8的格式转换.这里要注意的是一些2进值的字段内容会出问题.幸好,在我的项目中,2进值内容都进行了base64编码,如果数据库中存在2进值的内容,就要对它们进行单独的处理了.
mysqldump -h 192.168.2.2 --add-drop-table -c --set-charset=latin1 --allow-keywords --force -p -u root dbname >1.sql
内容转换utf8
iconv -c -f gb2312 -t utf8 1.sql -o 2.sql
在导入到4.1之前,先把mysql-server和mysql-client设置到utf8模式.
[mysqld]
character_set_server = utf8
[mysql]
default-character-set =utf8
保证让服务器端和客户端都默认工作在utf8模式下,重启mysql-server后就可以导入了.
mysql -u root -h localhost test <2.sql
到这里,一个数据库就转换完成了.已经完全工作在utf8模式下了.
php的程序的修改.也可以用iconv程序.进行.
首先从cvs导出一个干净的代码拷贝,比如.net目录下,
cvs -d :pserver:xxx.xxx.xx.xx net co
删除一些不需要转换的文件
然后执行转换
find . -name "*.php" -type f -exec mv {} {}.old \; -exec iconv --verbose -f gb2312 -t utf8 {}.old -o {} \; -exec rm {}.old \;
至此,php代码就批量的转换到utf8模式.还有就是只要修改html的head的语言声明,从gb2312改成utf8,浏览器就会自动使用utf8的模式显示这个页面. content="text/html; charset=utf8"
最后,就是把编辑器改成utf8模式了.这个就比较简单了.
好了,我们的web应用已经进入utf8模式了.哈哈.