我有一个带有 latin1 编码的旧数据库。我无权将其更改为 utf8。当我从模型中读取值时,我收到了乱码。
我尝试使用 name.decode('utf-8') 但它抛出了一个 unicode 错误:
'ascii' codec can't encode characters in position 4-12: ordinal not in range(128)
name.encode('utf-8') 也不起作用。
我有一个带有 latin1 编码的旧数据库。我无权将其更改为 utf8。当我从模型中读取值时,我收到了乱码。
我尝试使用 name.decode('utf-8') 但它抛出了一个 unicode 错误:
'ascii' codec can't encode characters in position 4-12: ordinal not in range(128)
name.encode('utf-8') 也不起作用。
如果您有权访问您的“settings.py”文件,那么您可以更改设置,说明您的数据库正在使用“latin1”。
以下是“settings.py”文件中“DATABASES”配置的示例。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_db',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '3306',
'OPTIONS': {
'charset': 'latin1',
'use_unicode': True, },
},
}
我之前遇到过类似的问题,请查看此处的链接Django database charset issue
u = unicode(name,'latin-1')
print u.encode('utf-8')