用python2.7.10解码ASCII字符串

2024-05-16 02:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还比较陌生,所以我可能仍然会犯很多新手错误。在

我在比较Python中两个看似匹配的字符串,但总是返回false。当我检查对象的表示时,我发现其中一个字符串是用ASCII编码的。在

第一个字符串的表示形式返回:

'\x00"\x00i\x00t\x00i\x00n\x00e\x00r\x00a\x00r\x00y\x00_\x00o\x00p\x00t\x00i\x00o\x00n\x00s\x00_\x00s\x00e\x00a\x00r\x00c\x00h\x00_\x00b\x00u\x00t\x00t\x00o\x00n\x00"\x00 \x00=\x00 \x00"\x00L\x00a\x00u\x00n\x00c\x00h\x00 \x00t\x00h\x00e\x00 \x00s\x00e\x00a\x00r\x00c\x00h\x00"\x00;\x00'

当第二个字符串的表示形式返回:

^{pr2}$

我试图找出如何解码第一个字符串以获得第二个字符串,这样我对这两个字符串的比较将匹配。 当我用

^{3}$

我得到一个unicode对象。我不知道该怎么做才能得到解码的字符串。在


Tags: 对象字符串形式x00x00tx00ax00ix00h
2条回答

你的第一个字符串似乎有些问题。我不太清楚为什么会有这么多的空字符(\x00),但不管怎样,我们都可以编写一个函数来清理这些字符:

s_1 = '\x00"\x00i\x00t\x00i\x00n\x00e\x00r\x00a\x00r\x00y\x00_\x00o\x00p\x00t\x00i\x00o\x00n\x00s\x00_\x00s\x00e\x00a\x00r\x00c\x00h\x00_\x00b\x00u\x00t\x00t\x00o\x00n\x00"\x00 \x00=\x00 \x00"\x00L\x00a\x00u\x00n\x00c\x00h\x00 \x00t\x00h\x00e\x00 \x00s\x00e\x00a\x00r\x00c\x00h\x00"\x00;\x00'
s_2 = '"itinerary_options_search_button" = "Launch the search";'

def null_cleaner(string):
    new_string = ""
    for char in string:
        if char != "\x00":
            new_string += char
    return new_string

print(null_cleaner(s_1) == null_cleaner(s_2))

一种不那么健壮的方法是简单地拼接字符串以删除其他字符(恰好是\x00):

^{pr2}$

... encoded in ASCII.

[lots of NULs]

没有。在

>>> '\x00"\x00i\x00t\x00i\x00n\x00e\x00r\x00a\x00r\x00y'.decode('utf-16be')
u'"itinerary'

当然,你的数据有一个额外的NUL,它会破坏它。一旦你清理干净,你就可以毫无问题地破译它了。在

相关问题 更多 >