在Python中从SQL Server解码错误的转义unicode?

时间:2018-12-19 19:21:50

标签: python sql-server unicode

我有一个CSV文件,似乎是UTF-16,是从SQL Server转储的。该文件包含正确编码的重音符号(西班牙语),但某些行的编码方式不同。像这样:

0xd83d0xde1b0xd83d0xde1b0xd83d0xde1b

这似乎是一个奇怪的编码

\ud83d\ude1b\ud83d\ude1b\ud83d\ude1b

\ud83d\ude1b是表情符号的替代对

我需要将所有内容都转换为一个漂亮的,整洁的UTF-8文件。我尝试了bytearray()encode()decode()等无穷无尽的组合。

如何将混合了UTF-16和ETF-16转义的文件转换为正确的Python 3字符串,最后将它们保存到新的UTF-8文件中?

1 个答案:

答案 0 :(得分:1)

您可以像这样转换十六进制数据:

>>> import binascii
>>> s = '0xd83d0xde1b0xd83d0xde1b0xd83d0xde1b'


>>> # Remove the leading '0x'
>>> hs = s.replace('0x', '')

>>> # Convert from hex to bytes
>>> bs = binascii.unhexlify(hs)
>>> bs
b'\xd8=\xde\x1b\xd8=\xde\x1b\xd8=\xde\x1b'

# Decode to str
>>> bs.decode('utf-16be')
''