2010年2月18日 星期四

Google appengine的Dev Environment中文問題

今天終於升級到app engine 1.3.1,然而可以預期的,一堆中文的錯誤問題,這些通常是在datastore的管理介面會遇到的  http://localhost:8080/_ah/admin/


這是其中一個例子:
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 507, in __call__
handler.get(*groups)
File "C:\Program Files\Google\google_appengine\google\appengine\ext\admin\__init__.py", line 839, in get
field = data_type.input_field(name, value, sample_values)
File "C:\Program Files\Google\google_appengine\google\appengine\ext\admin\__init__.py", line 940, in input_field
value = str(value)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)



這一隻程式一直都有錯誤,之前反應給Google,不過他們不理我,可能他們不會中文。


檔案位置在這裡:

C:\Program Files\Google\google_appengine\google\appengine\ext\admin\__init__.py


這是我改過的版本:

http://paste.plurk.com/show/176672/


這是原始的版本 (在您原本的環境應該都有,而且是一樣的)

http://paste.plurk.com/show/176676/


有興趣的人自可自行線上diff以下,可以使用 線上文字比較工具


python中的中文問題基本上有幾個條件:


  1. str()前必需要是 utf-8,比如  str( utf8_var.encode(‘utf-8’) )
  2. print 任何字串前,請先確認是utf-8,方法同上
  3. 請確認您測試的瀏覽器,在refresh時的編碼是utf-8
  4. sprintf的方法前,不能是utf-8,比如   “Hi, I am %s ” % utf8_var.decode(‘utf-8’)
  5. 操作replace或是re的時候,儘量使用 unicode


以上幾點是之前學到的經驗法則。