Python 使用(有意)困难字符清理字符串
我有一个解析用户输入的程序。我在unicode字符串中遇到了与\0000相关的错误(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转义序列
),因此我进行了一些调查并发现:
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-很抱歉造成混淆:)祝您度过愉快的一天。在将字符串传递给解码函数之前,请尝试用替换/翻译字符串(如果您使用了大量替换,则后者应该更有效)。尝试替换/翻译字符串(如果您正在处理大量替换,则后者应该更有效)在将它们传递给解码函数之前。