我正在使用带有UTF8
编码的Postgresql数据库,en_US.UTF-8
整理和ctype。
以下是相关模型:
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
返回:
关于发生了什么的任何想法?
答案 0 :(得分:1)
如评论中所述,我从MySQL导入数据到PostgreSQL。
我确保MySQL转储文件是用UTF-8编码的。
但是,在psql中运行\encoding
命令,返回'LATIN1'作为编码。
奇怪的是select
返回了正确编码的结果。
我已从OS X上的终端应用程序SSH连接到我的服务器。在远程服务器中运行locale
返回'en_US',没有编码设置。事实证明,由于我正在进行SSH连接,我的终端应用程序正在清理select
结果。
所以,解决这个问题:
psql -f<dumpfile> <db>
似乎问题是导入数据,psql没有可以使用的语言环境信息,并假设LATIN1是正在导入的文件的编码。