Django 1.11:utf8在Windows上写入文件的问题

时间:2018-01-12 16:54:05

标签: mysql django windows utf-8 character-encoding

我正在尝试使用来自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()

产生

尔,SA©OUL

当然,预期的结果是:

尔,韩国首尔

这就是我使用相同数据库在Linux上获得的。

所以奇怪的是,每个选项都有不同的部分是对错。在一种情况下,ORM检索的值是错误的。另一方面,源代码中创建的字符串对象是错误的。我找不到合适的方法。

所有文件都以UTF8编码(由记事本++报告)。 python版本是3.5.4 MySql数据库具有UTF8中的所有编码,用户表上的SQL查询显示预期的重音。 此代码通过django shell(python manage.py shell)执行,命令为:

EXEC(开放( '脚本/ test.py')。读()) 其中test.py包含上面显示的代码。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

http://mysql.rjweb.org/doc.php/charcoll#python

特别是源代码中的第1行或第2行(在代码中使用utf8编码的文字):

# -*- coding: utf-8 -*-