用(故意)困难字符消毒字符串

时间:2015-08-25 12:33:58

标签: python string unicode

我有一个解析用户输入的程序。我在unicode字符串(unsupported Unicode escape sequence)中收到与\ 0000相关的错误,所以我做了一些调查并发现:

A_real_string_\x03\x04\x00\x06\x00\x03\x08\t\x01\x03 \ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd

我想从字符串中删除这样的内容(特别是\x00)而不删除对国际字符的支持。什么是一个好方法?

编辑:我认为我真正想做的是删除\ x00及其后的所有内容。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

尝试使用非严格错误行为的codecs.decode,即:

codecs.decode('string', 'utf8', 'ignore')

然而,这会给你一个unicode字符串。要将其转换为先前的字节字符串格式,只需使用已解码字符串的.encode方法。

答案 1 :(得分:0)

如果要从字符串中删除某些字符,只需迭代字符串并跳过不需要的字符串,然后联接回各个字符。

假设你的unicode字符串被称为ustr,你可以使用:

u''.join([ c for ustr in a if c not in u'\00'])

(如果您以后想删除其他字符,请说\01将其添加到部分内容中:...not in u'\00\01')

这适用于Python 2.x和3.x

如果您想在首先\00之后删除所有内容,只需在原始字符串中find删除它:

ix = ustr.find(u'\00')
filtered = ustr if ix == -1 else ustr[:ix]