2012-06-30 66 views
3

在我正在处理的文本文件中,我有像 这样的字符。不知道他们是什么。python将未知字符转换为ascii

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

我试图通过使用.encode('ascii','ignore')将它转换为ascii。蟒蛇告诉我字符不whithin 0128

我也曾尝试unicodedata,unicodedata.normalize( 'NFKD',文本).encode( 'ASCII', '忽略'),与同样的错误

任何帮助?

谢谢!

+0

'od -x'报告'bfef efbd bdbf bfef efbd bdbf'。 – sarnold

回答

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可以帮助您保持一切。

+0

感谢您的介绍。但是我如何找出原文的编码? – cheng

+0

@cheng我不确定你可以轻松地直接编码随机字符串。它可能显示在某个地方,尽管在文件或其他地方 – TankorSmash

+0

正如在演示文稿中所解释的,您必须通过一些事先的协议来了解编码。你可以猜测编码,但唯一可以确定的方法是有一个解释编码是什么的规范。 –

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。