我正在处理一个文本文件,里面有像����这样的字符。不确定它们是什么。
我想知道如何去除/转换这些字符。
我尝试使用.encode('ascii', 'ignore')将其转换为ascii。但是Python提示char不在0-128之间。
我还尝试过unicodedata.normalize('NFKD', text).encode('ascii', 'ignore'),但是出现了相同的错误。
有人能帮忙吗?
谢谢!
我正在处理一个文本文件,里面有像����这样的字符。不确定它们是什么。
我想知道如何去除/转换这些字符。
我尝试使用.encode('ascii', 'ignore')将其转换为ascii。但是Python提示char不在0-128之间。
我还尝试过unicodedata.normalize('NFKD', text).encode('ascii', 'ignore'),但是出现了相同的错误。
有人能帮忙吗?
谢谢!
my_ascii = my_uni_string.encode('ascii', 'ignore')
如果您收到了错误提示,则最初没有真正的Unicode字符串。 如果是这样,您将拥有一个字节字符串。 您需要知道它使用的编码方式,并使用以下方法将其转换为Unicode字符串:
my_uni_string = my_byte_string.decode('utf8')
假设您的编码方式是UTF-8。
字节字符串和Unicode字符串之间的区别可能会让人感到困惑。我的演示文稿“实用的Unicode,或者说,如何停止痛苦”可以帮助您搞清楚所有这些。
这并不完美(尤其是对于短字符串),但chardet库在这里可能会有用:
http://pypi.python.org/pypi/chardet
要让chardet找出编码,然后将其编码为unicode,您可以执行以下操作:import chardet
encoding = chardet.detect(some_string)['encoding']
unicode_string = unicode(some_string, encoding)
当然,如果它们超出了ASCII范围,您将无法将它们编码为ASCII。
od -x
报告bfef efbd bdbf bfef efbd bdbf
。 - sarnold