2024-05-20 22:32:31 发布
网友
在python脚本中,我从一个没有编写的函数中得到一些字符串。它的编码是不同的。我需要把它转换成ascii格式。做这件事有什么愚蠢的方法吗?我不介意把非ascii字符替换为空白或其他内容。。。
你说“它的编码不同”。我猜“it”是指Python 2.x“字符串”,实际上是一个字节序列。
回答第一部分:如果你不知道编码字符串的编码,那么就没有办法对它做任何有意义的事情。如果您知道编码,那么第一步是将您的str转换为unicode:
str
unicode
encoded_string = i_have_no_control() the_encoding = 'utf-8' # for the sake of example text = unicode(encoded_string, the_encoding)
然后,如果愿意,可以将unicode对象重新编码为ASCII。
ascii_garbage = text.encode('ascii', 'replace')
*猜测编码有启发式方法,但它们速度慢且不可靠。这是one excellent attempt in Python。
我试着将字符串规范化,然后对其进行编码。怎么办:
import unicodedata s = u"éèêàùçÇ" print unicodedata.normalize('NFKD',s).encode('ascii','ignore')
只有当您使用unicode作为输入时,此操作才起作用。因此,您必须知道如何对函数输出进行编码和解码。如果没有,则有编码检测启发式,但在短字符串上,则不可靠。
当然,您可能会很幸运,函数输出依赖于各种未知编码,但使用ascii作为代码基,因此它们会为0到127之间的字节分配相同的值(如utf-8)。
在这种情况下,您可以使用OrderedSets过滤掉不需要的字符:
import string.printable # asccii chars print "".join(OrderedSet(string.printable) & OrderedSet(s))
或者如果你想要空白:
print("".join(((char if char in string.printable else " ") for char in s )))
“翻译”可以帮助你做同样的事情。
唯一能知道你有没有这么幸运的方法就是试试。。。有时,任何开发人员都需要一个巨大的幸运日:-)
如果您想要一个明确表示您所得到的信息的ASCII字符串,而不丢失任何信息,答案很简单:
不要乱用encode/decode,使用repr()函数(Python 2.X)或ascii()函数(Python 3.X)。
repr()
ascii()
你说“它的编码不同”。我猜“it”是指Python 2.x“字符串”,实际上是一个字节序列。
回答第一部分:如果你不知道编码字符串的编码,那么就没有办法对它做任何有意义的事情。如果您知道编码,那么第一步是将您的
str
转换为unicode
:然后,如果愿意,可以将unicode对象重新编码为ASCII。
*猜测编码有启发式方法,但它们速度慢且不可靠。这是one excellent attempt in Python。
我试着将字符串规范化,然后对其进行编码。怎么办:
只有当您使用unicode作为输入时,此操作才起作用。因此,您必须知道如何对函数输出进行编码和解码。如果没有,则有编码检测启发式,但在短字符串上,则不可靠。
当然,您可能会很幸运,函数输出依赖于各种未知编码,但使用ascii作为代码基,因此它们会为0到127之间的字节分配相同的值(如utf-8)。
在这种情况下,您可以使用OrderedSets过滤掉不需要的字符:
或者如果你想要空白:
“翻译”可以帮助你做同样的事情。
唯一能知道你有没有这么幸运的方法就是试试。。。有时,任何开发人员都需要一个巨大的幸运日:-)
如果您想要一个明确表示您所得到的信息的ASCII字符串,而不丢失任何信息,答案很简单:
不要乱用encode/decode,使用
repr()
函数(Python 2.X)或ascii()
函数(Python 3.X)。相关问题 更多 >
编程相关推荐