我有一个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文件中?
答案 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')
''