我试图用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:utf8在Windows上写入文件的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48230699/