【发布时间】:2016-01-15 20:45:21
【问题描述】:
我有一个最初在 Linux 机器 (UTF-8) 上创作的 Django Web 项目,我将 git 存储库代码克隆到我的 Windows 机器上。当访问从内置开发 Web 服务器运行的 Django 管理界面时,我无法进行身份验证。从 Django shell 运行一些身份验证调用后,似乎存在编码问题。是的,我知道最好的解决方案是不使用 Microsoft Windows,但这是我公司为我提供/决定的开发环境。
不幸的是,将此添加到我的设置文件中不适用于 Windows:
import locale
locale.setlocale(locale.LC_ALL, 'UTF-8')
从 VS 2013 PTVS 2.2 版即时窗口 C:\Python27\Lib\site-packages\django\contrib\auth\backends.py:
user.set_password('mark')
None
user.save()
None
user.check_password('mark')
True
user.check_password('mark')
error: Unicode-objects must be encoded before hashing
user.password
u'bc$$2b$12$FaJjXbx.DupiSJvLJbGg7.YLDd6Ci8wS9BdASm0z94SRttMb.MFwO'
您可以通过将密码哈希和密码变量字符串转换为 ASCII 来解决 Unicode 问题:
password = password.encode('ascii')
None
user.check_password(password)
True
显然这是错误的方法,我宁愿将默认编码设置为“UTF-8”,以便 Python 在全局范围内运行此 Django 项目。
我怎样才能最好地解决这个问题?
注意:在 Windows 机器上本地创建新的 django 项目可以正常工作,因为它们采用默认的 ASCII 编码。此外, sys.setdefaultencoding 不再是一个选项......无论如何它可能会导致更多问题。我没有时间将我们所有的应用程序升级到 Python 3.x。
【问题讨论】:
标签: python django unicode utf-8 ascii