【发布时间】:2017-10-11 14:58:06
【问题描述】:
我正在开发一个从 Redshift 数据库获取数据的 Django 应用程序。给这个 Redshift 数据库写信的人做出了一些奇怪的选择。我试图弄清楚如何处理它具有这样的字符串的事实:
Let’s play! \xe2\x9a\xbd\xef\xb8\x8f
通过 psycopg2,我将这些作为 Python 输入
u'Let\u2019s play! \\xe2\\x9a\\xbd\\xef\\xb8\\x8f'
我应该把它渲染成
来玩吧! ⚽️
它们在 Redshift 表中存储为varchar(65535)。我正在使用 pyscopg2 将它们拉入应用程序后端(Django 1.11、Python 2.7)。它们在前端使用 JavaScript 进行渲染。
任何建议都将不胜感激——我根本想不出任何解决方案。
【问题讨论】:
-
您在数据库中有mojibake。它有多种编码。我不确定你是如何得到你在 psycopg2 中所做的结果的,因为我找不到可以返回该结果的编码器。获取 U+2019 代码点意味着使用 Windows-125x 编码器,但它们都不会在 Python 中返回 UTF-8 余数而不会出错。字符串的正确 UTF-8 编码应为
'Let\xe2\x80\x99s play! \xe2\x9a\xbd\xef\xb8\x8f' -
哎呀,我从 psycopg2 得到的结果是对的。更新的问题。
标签: unicode utf-8 python-unicode unicode-normalization unicode-literals