UnicodeEncodeError - Python/Django 和 Postgres
UnicodeEncodeError - Python/Django and Postgres
简单的问题,无法找到解决方案。
我正在尝试从 Postgres 数据库中检索编码为 UTF-8 的多字节字符,然后 return 它们,但我遇到了编码问题。
这是我的数据库:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+---------------------------
articles | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
而table内的数据:
docid | unigram
-------------------------------------------------------+-----------------
en_2014-02-09_5eb67dc1927248d7926cdaf72559b57a7f9c017 | Haluk Bürümekçi
'unigram' 有一些多字节字符。这是我的简化 Python:
def test():
con = psycopg2.connect(params)
cur = con.cursor()
cur.execute("SELECT docid, unigram FROM test")
row = cur.fetchone()
try:
print unicode(row[1])
except Exception, E:
traceback.print_exc()
这导致:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128)
我已经尝试了很多我见过的不同的东西,包括:
row[1].decode(sys.getdefaultencoding()).encode('utf-8')
row[1].decode('utf-8')
row[1].encode('utf-8')
unicode(row[1])
str(row[1])
所有这些以及类似尝试的更多迭代仍然会导致 UnicodeDecodeError。有谁知道我到底做错了什么?
使用unicode(row[1], 'utf-8')
。这通过使用 utf-8
编解码器解码 row[1]
中的字符串来构造一个 unicode 字符串 :)
简单的问题,无法找到解决方案。
我正在尝试从 Postgres 数据库中检索编码为 UTF-8 的多字节字符,然后 return 它们,但我遇到了编码问题。
这是我的数据库:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+---------------------------
articles | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
而table内的数据:
docid | unigram
-------------------------------------------------------+-----------------
en_2014-02-09_5eb67dc1927248d7926cdaf72559b57a7f9c017 | Haluk Bürümekçi
'unigram' 有一些多字节字符。这是我的简化 Python:
def test():
con = psycopg2.connect(params)
cur = con.cursor()
cur.execute("SELECT docid, unigram FROM test")
row = cur.fetchone()
try:
print unicode(row[1])
except Exception, E:
traceback.print_exc()
这导致:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128)
我已经尝试了很多我见过的不同的东西,包括:
row[1].decode(sys.getdefaultencoding()).encode('utf-8')
row[1].decode('utf-8')
row[1].encode('utf-8')
unicode(row[1])
str(row[1])
所有这些以及类似尝试的更多迭代仍然会导致 UnicodeDecodeError。有谁知道我到底做错了什么?
使用unicode(row[1], 'utf-8')
。这通过使用 utf-8
编解码器解码 row[1]
中的字符串来构造一个 unicode 字符串 :)