python将未知字符转换为ascii

时间:2012-06-30 00:50:47

标签: python character-encoding

在我正在处理的文本文件中,我有像 这样的字符。不确定它们是什么。

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

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

我也尝试过unicodedata,unicodedata.normalize('NFKD',text).encode('ascii','ignore'),同样的错误

有人帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

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

my_ascii = my_uni_string.encode('ascii', 'ignore')

如果这给你一个错误,那么你真的没有一个Unicode字符串开头。如果这是真的,那么你有一个字节串。您需要知道它正在使用的编码,您可以将其转换为Unicode字符串:

my_uni_string = my_byte_string.decode('utf8')

(假设你的编码是UTF-8)。

字节字符串和Unicode字符串之间的这种分割可能会令人困惑。我的演讲Pragmatic Unicode, or, How Do I Stop The Pain可以帮助您保持一切。

答案 1 :(得分:1)

它并不完美(特别是对于较短的字符串),但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。