【发布时间】:2018-08-18 05:24:51
【问题描述】:
Django 2.0 版。 Python 3
我的数据库字符集和排序规则:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| latin1 | latin1_swedish_ci |
+--------------------------+----------------------+
老开发者使用 Perl 以KOI8-R 编码插入数据:(
为了从数据库中获取正确的值,我使用了丑陋的构造 str(username).encode('latin1').decode('koi8-r')。什么?我需要在我的所有项目中使用它来将数据发送到输出?或者编写函数来编码上下文字典,但我还需要额外的编码/解码所有数据。它会影响可用性和生产力
没有这个我会得到类似ëÏÚÌÑÎËÏ òÏÍÁÎ éÏÓÉÆÏ×ÉÞ
如何在 Django 中全局设置编码以防止在每个地方进行编码/解码操作?我更改了不同的编码方式,但没有任何反应。
在 settings.py 中,我尝试将 DEFAULT_CHARSET 设置为不同的编码(如果我将 default_charset 设置为 KOI8-R,则会出现错误:UnicodeEncodeError: 'charmap' codec can't encode characters in position 6228-6235: character maps to .使用其他编码没有错误但没有结果)。我试图在 settings.py 的数据库部分设置不同的字符集和排序规则值。
'OPTIONS': {
'charset': 'latin1',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES', character_set_client=latin1, character_set_results=latin1, character_set_connection=latin1, collation_connection=latin1_swedish_ci",
}
我在 index.html 模板中将 <meta http-equiv="Content-type" content="text/html; charset=koi8-r (or other)" /> 添加到 <head> 标记。没有结果。
似乎 Django 每次都执行SET NAMES utf8
为什么在 Perl 中我可以发送带有 charset=koi8-r 的标头,而我使用 CGI 从浏览器中的这些表中获取正常值?为什么使用 Django 或 Flask 在 Python 中没有类似的结果? Simple example in Perl
【问题讨论】:
-
是的,请参阅我的帖子中的选项指令。
标签: python mysql django encoding character-encoding