python - UnicodeEncodeError - Python/Django 和 Postgres

标签 python postgresql unicode encoding utf-8

简单的问题,很难找到解决方案。

我试图从 Postgres 数据库中检索编码为 UTF-8 的多字节字符,然后返回它们,但我遇到了编码问题。

这是我的数据库:

   Name    |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges
-----------+----------+----------+-------------+-------------+---------------------------
 articles  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

以及表格内的数据:

                         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 字符串 :)

关于python - UnicodeEncodeError - Python/Django 和 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28864588/

相关文章:

node.js - 如何添加外键来 Sequelize 模型

javascript - 用于匹配所有单词的正则表达式,包括标点符号和 unicode 字符。没有空白

python - 对多索引 pandas 系列上的重复行求和,并为缺失的类别插入零

python - python 中的 KFold 究竟做了什么?

python - 创建滚动总和列,一旦达到阈值就会重置

python - 如何压缩 json 行文件并上传到 azure 容器?

postgresql - Postgres : strange behavior with optimistic locking

sql - 表 "ap"中有一个名为 "session"的列,但无法从这部分查询中引用它

c# - 当异常消息包含不可打印字符时,TraceSource.TraceEvent() 无法记录

delphi - 拉撒路。相当于 Unicode 符号的 Chr()