在我正在处理的文本文件中,我有像 这样的字符。不知道他们是什么。python将未知字符转换为ascii
我想知道如何删除/转换这些字符。
我试图通过使用.encode('ascii','ignore')将它转换为ascii。蟒蛇告诉我字符不whithin 0128
我也曾尝试unicodedata,unicodedata.normalize( 'NFKD',文本).encode( 'ASCII', '忽略'),与同样的错误
任何帮助?
谢谢!
在我正在处理的文本文件中,我有像 这样的字符。不知道他们是什么。python将未知字符转换为ascii
我想知道如何删除/转换这些字符。
我试图通过使用.encode('ascii','ignore')将它转换为ascii。蟒蛇告诉我字符不whithin 0128
我也曾尝试unicodedata,unicodedata.normalize( 'NFKD',文本).encode( 'ASCII', '忽略'),与同样的错误
任何帮助?
谢谢!
你总是可以采取一个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可以帮助您保持一切。
感谢您的介绍。但是我如何找出原文的编码? – cheng
@cheng我不确定你可以轻松地直接编码随机字符串。它可能显示在某个地方,尽管在文件或其他地方 – TankorSmash
正如在演示文稿中所解释的,您必须通过一些事先的协议来了解编码。你可以猜测编码,但唯一可以确定的方法是有一个解释编码是什么的规范。 –
它并不完美(尤其是短字符串),但在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