如何使用python删除latin1和utf-8之间的所有冲突字符



我调用open(file,"r")并读取Python中的一些行。这给了我:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 4: ordinal not in range(128)

如果我添加"utf-8",我会得到:

'utf8' codec can't decode bytes in position 28-29: invalid continuation byte

如果我添加"ISO-8859-1",我没有收到任何错误,但一行是这样的:

2890 ready to try Argh� Fantasy Surfer Carnage� Dane, Marlon & Nat C all out!  #fantasysurfer

如您所见,有一些额外的字符,可能来自表情符号或其他东西......(这些是推文)。

清理这些线路的最佳方法是什么?

我想删除所有多余的元素...我希望字符串只有数字、字母和常用符号?!>.;等...

注意:我不关心html实体,因为我在另一个函数中替换了它们。我说的是奇怪的Argh ï¿1/2大屠杀ï¿1/2元素。

通常,这些会导致编码问题。

首先,确保在 python 文件的第一行指定了 rigth 编码。

# -*- coding: utf-8 -*-

其次,您可以使用库编解码器指定所需的编码:

import codecs
fich_in = codecs.open(filename,'r', encoding='utf-8')

第三,您可以使用以下方法忽略所有错误的字符:

TEXT.encode('utf-8', 'ignore').decode('utf-8')

 
# -*- coding: latin-1 -*-

可以帮忙。

尝试先使用解码,然后编码:

u"text".decode('latin-1').encode('utf-8')

或者尝试使用编解码器打开文件:

import codecs
with codecs.open('file', encoding="your coding")

您的问题是以错误的编码打开文件,或者您错误地识别了字符编码。

此外,如果您获得 ASCII 格式的文本,请使用它:

'abc'.decode('ascii')

unicode('abc', 'ascii')

最新更新