Python 使用(有意)困难字符清理字符串

Python 使用(有意)困难字符清理字符串,python,string,unicode,Python,String,Unicode,我有一个解析用户输入的程序。我在unicode字符串中遇到了与\0000相关的错误(不支持的unicode转义序列),因此我进行了一些调查并发现: A\u real\u string\uux03\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 我想从字符串中删除类似的内容(特别是\x00

我有一个解析用户输入的程序。我在unicode字符串中遇到了与\0000相关的错误(
不支持的unicode转义序列
),因此我进行了一些调查并发现:

A\u real\u string\uux03\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

我想从字符串中删除类似的内容(特别是
\x00
),而不放弃对国际字符的支持。什么是好方法

编辑:我想我真正想做的是删除\x00及其后的所有内容。我如何才能做到这一点?

尝试非严格的错误行为,即:

codecs.decode('string', 'utf8', 'ignore')
但是,这将为您提供一个unicode字符串。要将其转换为以前的字节字符串格式,只需使用解码字符串的
.encode
方法。

尝试非严格错误行为,即:

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

但是,这将为您提供一个unicode字符串。要将其转换为以前的字节字符串格式,只需使用解码字符串的
.encode
方法。

如果要从字符串中删除一些字符,只需迭代该字符串并跳过不需要的字符,然后重新连接各个字符

假设您的unicode字符串名为
ustr
,您可以使用:

u''.join([ c for ustr in a if c not in u'\00'])
(如果以后要删除其他字符,请说
\01
将它们添加到不在部分:
…不在u'\00\01')

这应该适用于Python2.x和3.x


如果要删除第一个
\00
之后的所有内容,只需在原始字符串中找到它:

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

如果要从字符串中删除某些字符,只需迭代该字符串并跳过不需要的字符,然后重新连接各个字符

假设您的unicode字符串名为
ustr
,您可以使用:

u''.join([ c for ustr in a if c not in u'\00'])
(如果以后要删除其他字符,请说
\01
将它们添加到不在部分:
…不在u'\00\01')

这应该适用于Python2.x和3.x


如果要删除第一个
\00
之后的所有内容,只需在原始字符串中找到它:

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

如果你不说你想删除什么和保留什么,其他人很难猜到…@SergeBallesta-再读一遍,你会注意到我确实特别提到了\x00我读过它,但正如你所说的那样(特别是\00),我明白你想删除
\00
和其他我猜不到的东西。我不确定您是否只想删除
\00
@SergeBallesta-很抱歉造成混淆:)祝您度过愉快的一天。如果您不说您想删除什么和想保留什么,其他人很难猜到…@SergeBallesta-再读一遍,您会注意到我确实特别提到了\x00我读过它,但正如您所说的(特别是\00),我知道您想要删除
\00
和其他我猜不到的内容。我不确定您是否只想删除
\00
@SergeBallesta-很抱歉造成混淆:)祝您度过愉快的一天。在将字符串传递给解码函数之前,请尝试用替换/翻译字符串(如果您使用了大量替换,则后者应该更有效)。尝试替换/翻译字符串(如果您正在处理大量替换,则后者应该更有效)在将它们传递给解码函数之前。