我正在尝试将一些文本写入一个文件,其中包含来自 django 对象(CharField)的数据和一些格式。问题在于重音字符(下例中的 é)。
在 Linux 上我没有任何问题。然而,在 Windows 7 上,我的行为非常令人困惑。
这个(不编码的公开调用):
from usermod.models import User
user = User.objects.get(pk=134)
with open('test.txt', 'w') as fout:
fout.write(user.birth_place + ',')
fout.write('Séoul')
fout.close()
产生:
SxE9l,首尔
而这个(带编码的开放调用):
from usermod.models import User
user = User.objects.get(pk=134)
with open('test.txt', 'w', encoding='utf8') as fout:
fout.write(user.birth_place + ',')
fout.write('Séoul')
fout.close()
产生:
首尔,首尔
当然,预期的结果是:
首尔,首尔
这是我在 Linux 上使用相同数据库得到的结果。
所以奇怪的是,每个选项都有不同的正确和错误部分。在一种情况下,ORM 检索到的值是错误的。另一种情况是源代码中创建的字符串对象是错误的。我找不到兼顾两者的方法。
所有文件均以 UTF8 编码(如 notepad++ 所报告)。 python版本是3.5.4 MySql 数据库的所有编码均为 UTF8,并且用户表上的 SQL 查询显示了预期的重音。 此代码通过 django shell (python manage.py shell) 使用以下命令执行:
exec(open('scripts/test.py').read()) 其中 test.py 包含上面显示的代码。
有什么想法吗?
最佳答案
http://mysql.rjweb.org/doc.php/charcoll#python
特别是源代码中的第一行或第二行(在代码中包含 utf8 编码的文字):
# -*- coding: utf-8 -*-
关于mysql - Django 1.11 : Issues with utf8 writing to file on windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48230699/