python将未知字符转换为ascii

python将未知字符转换为ascii,python,character-encoding,Python,Character Encoding,在我正在处理的文本文件中,我有如下字符����. 不知道是什么 我想知道如何删除/转换这些字符 我尝试使用.encode('ascii','ignore')将其转换为ascii。python告诉我char不是whithin 0128 我还尝试了unicodedata、unicodedata.normalize('NFKD',text.)、encode('ascii','ignore'),但出现了相同的错误 有人帮忙吗 谢谢 您始终可以使用Unicode字符串和显示的代码: my_ascii =

在我正在处理的文本文件中,我有如下字符����. 不知道是什么

我想知道如何删除/转换这些字符

我尝试使用.encode('ascii','ignore')将其转换为ascii。python告诉我char不是whithin 0128

我还尝试了unicodedata、unicodedata.normalize('NFKD',text.)、encode('ascii','ignore'),但出现了相同的错误

有人帮忙吗


谢谢

您始终可以使用Unicode字符串和显示的代码:

my_ascii = my_uni_string.encode('ascii', 'ignore')
如果这给了您一个错误,那么您实际上没有一个Unicode字符串来开始。如果这是真的,那么您有一个字节字符串。您需要知道它使用的是什么编码,并且可以使用以下命令将其转换为Unicode字符串:

my_uni_string = my_byte_string.decode('utf8')
(假设您的编码是UTF-8)

字节字符串和Unicode字符串之间的这种分割可能会造成混淆。我的演示文稿可以帮助您保持通畅。

它并不完美(特别是对于较短的字符串),但chardet库在这里很有用:

要让chardet找出编码,然后按照unicode编码,您需要执行以下操作:

import chardet
encoding = chardet.detect(some_string)['encoding']
unicode_string = unicode(some_string, encoding)

当然,如果它们超出ascii范围,您将无法将其编码为ascii。

od-x
reports
bfef-efbd-bfef-efbd-bf
。感谢您的演示。但是我怎么才能找到原始文本的编码呢?@cheng我不确定你是否能很容易地凭直觉判断出随机字符串的编码。它可能在文件或其他文件中的某个地方向您显示,而演示文稿中对此进行了解释,您必须通过某种事先约定了解编码。您可以猜测编码,但唯一确定的方法是有一个说明编码是什么的规范。