“黄沙中,飞舞着我们的先王,他们在空中俯视着子民们对蓝色的向往。” 火之章 霜之章 [最新更新:9月15日]

你在这里看到的是一位.NET程序员的执着及其信仰的效率世界观。我们行走在消逝中,但我们都有希望,都有传承。

GoogleAppsEngine数据存储中的中文编码支持问题 ,2008-11-15,0条评论

因为python并不会像JAVA和.NET那样原生支持多国语言编码,它的内部仅仅是ascII码,所以在开发的时候给我们这些以多字节编码文字为母语的程序员带来了些麻烦。解决这个问题可谓是披星戴月废寝忘食,本来这个东西就没有多少支持文档,废话不多说,下面是总结了的一些办法:
1 移民到美国,从此以后以英语作为生活和工作用语,可以从根本上逃避问题。

2 在移民美国的问题上存在困难的朋友,可以向Guido van Rossum和埃里克-施密特传达这个怨念,建议给python增加原生支持多国语言编码,也有望在将来获得问题解决。

3 以上两点都做不到或者等不及的朋友,就要自己动手了:保证每个python文件和运行期关系到的所有HTML文件都是以UTF8格式存储,编码也声明为UTF-8。然后在接收数据期间,给每个有可能出现中文的参数都以这样的格式来编写:

xxx = self.request.get('content').encode('utf-8')

在数据库字段的设置上(已经不叫数据库了,但是暂且这么称呼吧):

xxx = db.Text(title, encoding="utf-8")

这样就可以保证存储成功了。另外要注意一点:不要在代码文件中声明中文字符串值的变量或者直接传递硬编码的中文常量,那是彻底没戏唱的(可能只是我找不出吧,也没工夫搞这些政治斗争了)。通过表单参数或者URL参数和数据库读取来的中文是没有问题的。总之,不要在python代码中直接写中文。

4 如果你嫌第3条麻烦的话,有一个懒办法,直接在数据库字段上声明为GB2312编码:

xxx = db.Text(title, encoding="936")

虽然这个办法也可以成功使用中文,但是强烈不推荐使用GB2312,兼容性非常差。在各种跨平台协议都以UTF8为基本编码的今天,这个办法只能作为万万不得已的下策而为之。
mcts

Category

Tag

Archives

  • kvspas
  • Powered by Google App Engine