我试图用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/

10-15 21:20