tg和Mysql存储显示中文的问题
这几天,在试用Turbogears,数据库使用的是MySQL5。模板使用Kid。开发环境是easyEclips for python。在做Bookmark例程的时候遇到一些问题。记录下来。以备查寻。
1、Kid模板显示中文的问题。
因为Kid本身是使用Utf-8编码的。但是启动服务器后用Firefox查看是??。一直想不通。在网络上Search,包括Limodou在内的几位大侠说,用支持保存为Uft-8编码的编辑器,把Kid文件保存成Utf-8编码应该就可以的。
本来以为Eclipse中默认是utf8的。几次不成功后,仔细看了下EasyEclipse的设置windows->references->workspace中,把GBK改成Utf8。重启后,编辑保存后。页面正确显示了。
2、MySql的存储显示中文问题。
MySQL5以上版本据说支持Utf8编码存储。但Form中有中文内容提交到数据库时出错。UnicodeTypeError等。
google search。找到一篇:
使mysqldb支持中文。
在此表示感谢。
但是在TG中,使用了SQLobject并不直接使用MySQLdb操作。看来要变通下。
首先,在bookmark/dev.cfg中把数据库引擎改为:
sqlobject.dburi="mysql://username:password@hostname:3306/dbname?sqlobject_encoding
=utf-8&charset=utf8&use_unicode=1&read_default_file=my.ini"。
“?”后面的参数会传送到Python24\Lib\site-packages\SQLObject-xx-py2.4.egg\sqlobject\mysql\mysqlconnection.py中。被MySQLConnection类作参数使用。里面支持的参数都可以加到上面的?号后面用&key=value&方式传送参数过去。如:charset=utf8和use_unicode=1。注use_unicode是Boolean量,但会被转换成int(),且好像上面不支持use_unicode=TRue的方式。变通了下,用1代替True。这些参数通过mysqlconnectio传送到MySQLdb中。完成对数据库的操作。
其次,在Mysql的安装目录中找到my.ini,设default-character-set=utf-8,保存退出。
另外、在mysqlconnection.py与Python24\Lib\site-packages\Mysqldb\connections.py中使用硬编码方式指定两个参数也可。charset=utf8和use_unicode=True。不过,这种方式不值的推荐。
经过以上设置,我的TG可以支持显示中文,MySQL中也没有问题。