django1.11:utf8写入windows文件的问题

vjrehmav  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(227)

我正试图用django对象(charfield)的数据和一些格式将一些文本写入一个文件。问题是重音字符(é 在下面的例子中)。
在linux上我没有问题。然而,在Windows7上,我的行为非常混乱。
此(未编码的开放呼叫):

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,s型é欧尔
而这(使用编码打开调用):

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()

生产:
sé乌尔,sã©欧尔
当然,预期结果是:
sé乌尔,sé欧尔
这就是我在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包含上面显示的代码。
你知道吗?

66bbxpm5

66bbxpm51#

http://mysql.rjweb.org/doc.php/charcoll#python
尤其是源代码中的第1行或第2行(要对代码中的文字进行utf8编码):


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

相关问题