我一直在我的应用程序中使用一个psql/django堆栈,而在Windows下却没有任何问题。当在Linux中使用特殊字符时Django Admin(使用postgresql)的UnicodeDecode错误
但是,最近我切换到一个Linux的盒子,许多地方开始分手。作为西班牙语演讲者,我的应用程序使用了许多特殊字符,如“á”或“ñ”。当然,我决定我的数据库和default_encoding
应该是UTF-8,以避免任何有趣的问题。
尽管应用程序没有问题显示具有特殊字符的对象,但管理员却遇到了很多问题。每当一个元素,它的显示名称有特殊字符是牵强,我会得到一个可怕的:
UnicodeDecodeError at /ajax_select/ajax_lookup/images 'ascii' codec can't decode byte 0xc3 in position 35: ordinal not in range(128)
从本质上讲,Django会试图获取这些元素的unicode()
和悲惨的失败了。我可能失去了一些东西,因为它在我的Windows中没有这样的问题,所以,基本上是:
PostgreSQL数据库的编码是UTF-8在这两个地方(字符类型和整理是不完全一样的,但我不认为这应该有所作为:English_United States.1252与en_US.UTF-8
Apache是不是罪魁祸首(我不知道它是如何可能的),因为这发生在Django开发服务器。
Django默认为UTF-8,这是真的,因为正如我所说,我可以看到特殊字符rs在应用程序的其他位置完美无瑕,它只是在管理员的一些特定场景中失败。
我已经跑出去的想法,应该是什么和错误在于Django管理代码的中间很难调试,但大多是在str()
或unicode()
功能崩溃。
问题的核心是:在Windows中str('árbol')
='árbol'。在Linux中str('árbol')
崩溃。
任何想法将非常感激。
其实就是这样。 LANG =的en_US.UTF-8 LC_CTYPE = “的en_US.UTF-8” LC_NUMERIC = “的en_US.UTF-8” LC_TIME = “的en_US.UTF-8” LC_COLLATE = “的en_US.UTF-8” LC_MONETARY = “的en_US.UTF-8” LC_MESSAGES = “的en_US.UTF-8” LC_PAPER = “的en_US.UTF-8” LC_NAME = “的en_US.UTF-8” LC_ADDRESS = “的en_US.UTF-8” LC_TELEPHONE = “'en_US.UTF-8” LC_MEASUREMENT =“en_US.UTF-8” LC_IDENTIFICATION =“en_US.UTF-8” LC_ALL = – Bruno
这很有趣,因为'str('árbol')'只在我的语言环境不是设置为UTF-8。也许你可以检查应用程序用户(例如www-data或apache)是否有正确的区域设置? – sayap
另外,您可以尝试比较'python -c“import sys; print sys.getdefaultencoding()”'的输出。 Windows安装可能已经改变了'ascii'默认值。 – sayap