2011-05-24 36 views
0

我正在使用repoze.bfg v1.3和chameleon v2(zpt模板)。 我買了編碼的麻煩,同時呈現模板:配置repoze.bfg使用utf-8編碼

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 9: ordinal not in range(128)

如何配置repoze.bfg使用UTF-8編碼,變色龍?
添加以下到配置:

config.add_settings(encoding="UTF-8") 
config.add_settings(default_encoding="UTF-8") 

,並沒有幫助。使用Latin-1的

回答

1

問題在於變色龍使用的translationstring庫。 儘管變色龍可以配置爲使用不同的編碼,但它會將它直接獲得的數據傳遞給轉換字符串。
在構造函數中的串,它試圖從它得到的數據製作unicode。當數據是非ASCII字節序列時(str在Python 2.x中),會出現錯誤。

的解決方案是始終傳遞Unicode翻譯字符串或使用下面的差異更新庫本身:

65c69 
<  self = unicode.__new__(self, msgid) 
--- patch 
>  try: 
>   self = unicode.__new__(self, msgid, "utf8") # FIXED~ 
>  except Exception as e: 
>   self = unicode.__new__(self,msgid) 
0

0xc5是,蟒蛇不能將其轉換爲UTF-8在不知道信源編碼

如果此字符串來自一個CGI形式,確保服務器設置正確的編碼

提示:

lynx -dump -mime_header http://url_of_the_page_with_the_form_to_compile|less 

,尋找類似

的Content-Type:text/html的; charset = UTF-8

如果charset不是utf-8你的配置有誤, 也許apache會覆蓋你的設置?

+0

這不是服務器和HTML的情況。 它是模板本身。模板引擎嘗試讀取模板文件並插入一些動態變量時引發錯誤。 同樣可以發生沒有html/http – 2011-05-25 23:14:43

+1

所以看起來像repoze bfg不能夠自動檢測和轉換模板字符集,我不知道有一種方法可以使它讀取latin1並轉換utf8,但你可以隨時使用iconv轉換你的模板,這裏的一些例子http://www.kriyayoga.com/love_blog/post.php/224 – sherpya 2011-05-26 10:01:15

+0

我解決它的方式不同:玩源代碼並被迫使用utf8;) – 2011-05-26 16:08:50