【发布时间】:2014-09-01 20:37:14
【问题描述】:
我正在使用带有UTF8 编码、en_US.UTF-8 collate 和 ctype 的 Postgresql 数据库。
以下是相关模型:
class Book(models.Model):
book_id = models.IntegerField(primary_key=True, db_column='Book_ID')
lib_id = models.IntegerField(db_column='LIB_ID')
call_no = models.IntegerField(db_column='Call_no')
title = models.CharField(max_length=100, db_column='Title')
alt_title = models.CharField(max_length=100, db_column='Alt_Title')
def __unicode__(self):
return self.alt_title
在 django shell 中,我在打印对象时得到了一些奇怪的编码,但在打印 alt_title 时却没有。
>>> from library.models import Book
>>> book = Book.objects.filter(book_id=2)[0]
>>> book
<Book: ØªÙØ³Ùر اÙÙØ±Ø§Ù Ø§ÙØ¹Ø¸ÙÙ>
>>> book.alt_title
u'\xd8\xaa\xd9\x81\xd8\xb3\xd9\x8a\xd8\xb1 \xd8\xa7\xd9\x84\xd9\x82\xd8\xb1\xd8\xa7\xd9\x86 \xd8\xa7\xd9\x84\xd8\xb9\xd8\xb8\xd9\x8a\xd9\x85'
>>> print book
ØªÙØ³Ùر اÙÙØ±Ø§Ù Ø§ÙØ¹Ø¸ÙÙ
我在管理界面中也得到了相同的编码:
同时,psql 中的 select 返回以下内容:
对正在发生的事情有什么想法吗?
【问题讨论】:
-
我认为提及这一点并不重要,但我确实将数据从 MySQL 导入 Postgres。
-
我有我的 sql 转储文件并使用不同的编码,似乎 Django 显示的是某种西方编码。它可能是 Windows 1252、ISO 8859-1、ISO 8859-3、ISO 8859-15。
-
你的终端中
locale命令的输出是什么?此外,在您的 Django 应用程序中,您是否为请求发送编码标头? -
@CraigRinger,好问题:) ...我能够在一些帮助下解决它(请参阅我的答案)。
标签: django postgresql encoding utf-8 django-models