删除坏字符“\ xC2”python string

时间:2015-11-11 11:27:13

标签: python string python-3.x hex character

我有下一个代码:

string_msg = '\x80\x01\x00\x00\x00\x00\x53\x58\x00\x1C\x00\x00\x00\x08\x00\x01\x00\x74\x00\x00\x00\x0A\x00\x54\x00\x00\x00\x03'
print(string_msg)
if sys.version < '3':
    print(":".join("{:02x}".format(ord(c)) for c in string_msg))
else:
    print(":".join("{:02x}".format(c) for c in string_msg.encode()))

在python 2中,结果是:

80:01:00:00:00:00:53:58:00:1c:00:00:00:08:00:01:00:74:00:00:00:0a:00:54:00:00:00:03

但是在python 3中,结果是:

c2:80:01:00:00:00:00:53:58:00:1c:00:00:00:08:00:01:00:74:00:00:00:0a:00:54:00:00:00:03

现在我需要在python 3中执行这段代码,所以我必须删除开头的第一个字节才能删除“c2”,一切都会好的,但试着用太多代码片来做我在这个论坛中找到了:

string_msg = string_msg[1:]
string_msg.replace('\xC2', '')
string_msg = ''.join([i if ord(i) < 130 else '' for i in string_msg])

结果总是一样的:

01:00:00:00:00:53:58:00:1c:00:00:00:08:00:01:00:74:00:00:00:0a:00:54:00:00:00:03

还删除了第二个字节80,所以我的问题是:如何删除第一个字节c2以及为什么当我尝试这样做时第二个字节也被删除了?

2 个答案:

答案 0 :(得分:2)

问题是string_msg是Python 2上的字节字符串,尽管看起来相同,它是Python 3上的Unicode字符串 - 字节b'\x80'是一个与Unicode代码点完全不同的概念{ {1}}:可以使用不同编码中的不同字节表示相同的Unicode代码点,反之亦然,相同的字节可能代表不同编码中的不同字符。

如果u'\x80'是一个字节序列,则使用string_msg字面值:

b''

答案 1 :(得分:0)

您可以通过编码为ISO 8859-1将前256个字符中的文本转换为其天真字节值。

3>> '\x80'.encode('latin-1')
b'\x80'