我正在尝试使用来自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包含上面显示的代码。
有什么想法吗?
答案 0 :(得分:0)
http://mysql.rjweb.org/doc.php/charcoll#python
特别是源代码中的第1行或第2行(在代码中使用utf8编码的文字):
# -*- coding: utf-8 -*-