Ant-Veil

Caspar Blog

Python Web 操作 MySQL 乱码问题的解决

| Comments

乱码,身为 CJK 语言国度的程序员永恒的主题……

乱码,在 stardict 里面查了一下翻译,居然出来这么一长串:

characters changed to be irrecognizable because different coder or other reasons

不管怎么说,这次是又碰上乱码了。

症状是这样的,写了几个 psp 文件,内容大概是通过 POST 方法从表单获取数据,写入数据库然后另一个页面调用数据库内容显示。结果在写完之后调用显示页面,提示错误:unicodeDecodeError: 'ascii' codec can't decode byte,看来是因为我数据库里的字段用了中文,显示不出来,然后在 MySQL 里面 SELECT * 了一下,发现含中文的内容都是???字样的乱码(以前怎么就没注意捏……)。

上网搜,发现了这个网页:http://blog.csdn.net/foyuan/archive/2007/07/27/1711100.aspx,文中提示了四个步骤确保乱码消失。

因为我写的是 PSP 页面,不是纯粹的 python,似乎不能用#-*- coding -*-来指定编码,但是参照里面提示的两个步骤,我最后也成功解决了乱码问题:

1. 解决 MySQL 显示乱码,修改/etc/mysql/my.cnf文件,分别在[client]、[mysqld]后指定编码:default-character-set = utf8,重启 mysql 服务。

2. 解决 PSP 页面不能解析 Unicode 字符,在 python 语法块内,导入 sys 包,然后指定编码:

import sys
...

reload(sys)
sys.setdefaultencoding('utf-8')

这样就搞定了,等我后续看看有其他什么问题没……

Comments