Python 3'的默认编码;s open()在Windows下。sys.getdefaultencoding()设置不受尊重
我已经为这个问题发火好几个小时了 我想使用django的makemessages命令生成一个消息文件,它在Linux环境中运行良好,而Linux环境实际上以一种合理的方式处理语言环境设置。然而,当我在Windows下尝试同样的事情时,每次python试图打开一个文件时,它都假定它是用Python 3'的默认编码;s open()在Windows下。sys.getdefaultencoding()设置不受尊重,python,python-3.x,encoding,utf-8,Python,Python 3.x,Encoding,Utf 8,我已经为这个问题发火好几个小时了 我想使用django的makemessages命令生成一个消息文件,它在Linux环境中运行良好,而Linux环境实际上以一种合理的方式处理语言环境设置。然而,当我在Windows下尝试同样的事情时,每次python试图打开一个文件时,它都假定它是用cp932(SHIFT-JIS)编码的,这会造成各种各样的破坏 手动将encoding='utf-8'添加到每个open调用中是可行的,但这并不是解决问题的好方法。有没有办法强制打开以使用特定的默认编码 sys.g
cp932
(SHIFT-JIS)编码的,这会造成各种各样的破坏
手动将encoding='utf-8'
添加到每个open
调用中是可行的,但这并不是解决问题的好方法。有没有办法强制打开
以使用特定的默认编码
返回“utf-8”,因为某些神秘的原因,此设置不受尊重sys.getdefaultencoding()
- Python编码和Python编码都设置为“utf-8”
- 我的代码页设置为
cp65001
locale.getPreferredEncode()
返回cp932
,所以我想找到默认为utf-8
的Windows区域设置就可以了。这样的事情真的存在吗?试试这个
import locale
locale.setlocale(locale.LC_ALL, 'en_US.utf-8')
如果你真的找不到解决方案,这可能是Windows 3.3中的一个bug。另一方面,在调用
open()
时明确编码并不是一个坏主意。我知道明确编码从来都不是一个坏主意,问题是在Django的实用程序的相关部分中替换所有对open
的调用实际上并不可行。我发现locale.getpreferredencoding()
确实返回cp932
,所以这可能是问题所在。是否有任何Windows区域设置将其设置为utf-8
?可能,我对此不太熟悉。但它返回cp932
的事实可能确实表明,这里的干扰是您计算机(或一般Windows)上的区域设置。我应该补充一点,这个问题(原则上)可以通过重写locale.getPreferredEncode(我暂时这样做是为了解决这个问题)来解决,但我真的希望有另一种方法来实现这一点。您可以向Django开发人员建议,他们让您(而不是Microsoft)指定您希望Django在其内部打开调用中使用的编码。同时,至少升级到3.3.5以修复其错误;可能有一些与unicode有关。