我正在研究从Redshift数据库获取数据的Django应用程序。写信给这个Redshift数据库的人做了一些奇怪的选择。我试图弄清楚如何处理它有这样的字符串的事实:
Let’s play! \xe2\x9a\xbd\xef\xb8\x8f
使用psycopg2我将这些内容作为
进入Pythonu'Let\u2019s play! \\xe2\\x9a\\xbd\\xef\\xb8\\x8f'
我应该将其渲染为
让我们玩吧! ⚽️
它们以varchar(65535)
的形式存储在Redshift表中。我使用pyscopg2将它们拉入app后端(Django 1.11,Python 2.7)。它们在前端使用JavaScript进行渲染。
任何建议都会受到赞赏 - 我根本无法解决任何问题。
答案 0 :(得分:1)
由于存在混合编码(看起来像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'Let\u2019s play! \\xe2\\x9a\\xbd\\xef\\xb8\\x8f'
f = esc.sub(fixer,s)
print repr(f)
print f
输出:
u'Let\u2019s play! \u26bd\ufe0f'
Let’s play! ⚽️