【发布时间】:2015-02-11 16:13:45
【问题描述】:
我已经为这个问题烦恼了几个小时了。
我有一个想要使用 django 的 makemessages 命令生成的消息文件,该命令在 Linux 环境中运行良好,它实际上以一种理智的方式处理语言环境设置。但是,当我在 Windows 下尝试相同的操作时,每次 python 尝试打开文件时,它都假定它是用cp932 (SHIFT-JIS) 编码的,这会造成各种破坏。
在每个open 调用中手动添加encoding='utf-8' 是可行的,但这并不是解决问题的好方法。有没有办法强制open 使用特定的默认编码?
-
sys.getdefaultencoding()返回 'utf-8',由于某种神秘的原因,此设置不受尊重 - PYTHONIOENCODING 和 PYTHONENCODING 都设置为“utf-8”
- 我的代码页设置为
cp65001
这是我的python版本字符串:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32
编辑:我注意到locale.getpreferredencoding() 返回cp932,所以我想找到一个默认为utf-8 的Windows 语言环境就可以了。这样的事情还存在吗?
【问题讨论】:
-
如果实在找不到解决办法,可能是Windows 3.3 的bug。另一方面,在调用
open()时明确编码并不是一个坏主意。 -
好吧,我知道明确编码从来都不是一个坏主意,问题是在 Django 实用程序的相关部分中替换所有对
open的调用并不是真正可行的。我发现locale.getpreferredencoding()确实返回cp932,所以这可能是问题所在。是否有任何 Windows 语言环境将此设置为utf-8? -
可能,我对此不太熟悉。但它返回
cp932的事实可能确实表明它是您机器(或一般 Windows)上的语言环境设置干扰了这里。 -
我应该补充一点,这个问题(原则上)可以通过覆盖 locale.getpreferredencoding 来解决(我暂时这样做是为了解决这个问题),但我真的希望有另一种方法来解决这个问题。
-
您可能会建议 Django 开发人员让 you 而不是 Microsoft,指定 you 希望 Django 在其内部打开时使用的编码来电。同时,至少升级到 3.3.5 的错误修复;可能有一些与 unicode 有关。
标签: python python-3.x encoding utf-8