我正在开发一个从Redshift数据库获取数据的Django应用程序。写信给这个Redshift数据库的人做出了一些奇怪的选择。我试图弄清楚如何处理它有这样的字符串的事实:
Let’s play! xe2x9axbdxefxb8x8f
使用 psycopg2,我将这些作为 Python 获取
u'Letu2019s play! \xe2\x9a\xbd\xef\xb8\x8f'
我应该将其呈现为
我们来玩吧! ⚽️
它们作为 varchar(65535)
存储在 Redshift 表中。我正在使用pyscopg2将它们拉入应用程序后端(Django 1.11,Python 2.7)。它们在前端使用 JavaScript 渲染。
任何建议将不胜感激 - 我根本无法找到任何解决方案。
因为存在混合编码(看起来像 Windows-1252 和十六进制转义的 UTF-8),如果这种混合一致,您可以尝试对条目进行后处理。
下面是一个正则表达式,用于查找十六进制转义序列并将其替换为 UTF-8 解码等效项:
import re
esc = re.compile(r'(?:\x[0-9a-f]{2})+')
def fixer(m):
return m.group().encode('latin1').decode('unicode-escape').encode('latin1').decode('utf8')
s = u'Letu2019s play! \xe2\x9a\xbd\xef\xb8\x8f'
f = esc.sub(fixer,s)
print repr(f)
print f
输出:
u'Letu2019s play! u26bdufe0f'
Let’s play! ⚽️