首页 > 解决方案 > 在 Python 3 中将 Latin-1 转换为 UTF-8 字符串时出错

问题描述

我有一个文本数据集,只能通过使用编码Latin-1由 pandas 导入,当我尝试使用其他编码时,它会导致错误。我想从该数据集中清除特殊字符。但是,这些特殊字符以十六进制形式出现,如下所示:

AKU\n\nKU \xf0\x9f\x98\x84\xf0\x9f\x98\x84\xf0\x9f\x98\x84

然后我在另一个线程上看到,我可以通过将其解码为 Latin-1,然后编码为 UTF-8 来摆脱它。但它导致错误,如图所示。

x = data.iloc[5, 0].decode('iso-8859-1').encode('utf8')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-91-c80119246806> in <module>()
      1 print(data.iloc[5, 0])
----> 2 x = data.iloc[5, 0].decode('iso-8859-1').encode('utf8')
      3 if True:
      4   x = re.sub("[\n\t]", ' ', x)
      5   x = re.sub("\d+", ' ', x)

AttributeError: 'str' object has no attribute 'decode'

基本上,如何将其转换为 UTF-8 以进行后续文本处理?或者有没有其他方法可以摆脱那些不需要转换的人?谢谢

错误看起来像这样

标签: pythonencodingutf-8text-processingiso-8859-1

解决方案


您可以使用

import codecs
print(codecs.decode(data.iloc[5, 0], 'unicode-escape').encode('latin1').decode('utf-8'))

请参阅在线 Python 演示

import codecs
text = r'AKU\n\nKU \xf0\x9f\x98\x84\xf0\x9f\x98\x84\xf0\x9f\x98\x84'
print(codecs.decode(text, 'unicode-escape').encode('latin1').decode('utf-8'))
# => AKU\n\nKU 

推荐阅读