mysql - Django 1.11 : Issues with utf8 writing to file on windows

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

产生:

首尔,首尔

当然,预期的结果是:

首尔,首尔

这是我在 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 : Issues with utf8 writing to file on windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48230699/

相关文章:

python - 如何在不同应用程序的 django View 中获取登录用户

python - Django 向装饰器添加可选参数

c++ - 为什么我会收到错误信息并且...?

windows - 非管理员用户的 SignTool 证书位置

php - mySQL php 查询 - 新闻/ friend 提要

php - 如何创建一个主键按 DESC 排序的 MySQL 表,并在插入新行后保持这种状态?

php - 私有(private)收件箱中发件人和收件人的不同背景颜色

mysql - PDO异常 : SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) i

javascript - 如何在 django 中包含项目根目录外部的静态文件

android - 在windows上使用android ndkr8通过cygwin编译ffmpeg2