为什么我的unicode字符串的最后一部分被吃掉了?

2024-10-01 07:13:51 发布

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

我正在尝试生成ascii到javascriptunicode,我可以生成它,但是在检查了一些方面之后。我注意到我的程序正在吃掉字符串的最后一部分。我怎样才能解决这个问题?你知道吗

import binascii

content = 'string\n'

first_byte = ""
second_byte = ""
shellcode = ""
flag = 0
for b in content:
    if flag == 0:
        shellcode += "%u"
        first_byte = binascii.hexlify(b)
        flag += 1
    else:
        second_byte = binascii.hexlify(b)
        shellcode += second_byte
        shellcode += first_byte
        flag = 0

print shellcode

我的脚本输出

%u6c62%u6361%u6c6b%u6965%u7574%u

想要一个,但一般来说不管是什么字符串

%u6c62%u6361%u6c6b%u6965%u7574%u0a73

Tags: 字符串import程序forstringasciicontentbyte
2条回答

您正在使用变量flag将您的输入分成两部分。偶数字符保存在first_byte中,当您得到奇数字符时,您将两者都保存到shellcode。循环结束时,first_byte中有一个尚未输出的字符,如果字符数为偶数。你知道吗

关于这个问题的解释,见Mark's answer。至于如何修复它,您可以使用下面的一个示例在两字节块中迭代字符串:How do you split a list into evenly sized chunks?

import binascii

content = 'string\n'

def chunks(sequence, n):
    """
    Yield successive n-sized chunks from the sequence.

    Modified from https://stackoverflow.com/a/312464/4518341
    """
    for i in xrange(0, len(sequence), n):
        yield sequence[i:i+n]

shellcode = ''
for t in chunks(content, 2):
    shellcode += "%u"
    if len(t) > 1:
        shellcode += binascii.hexlify(t[1])
    shellcode += binascii.hexlify(t[0])

print shellcode

输出:

%u7473%u6972%u676e%u0a

相关问题 更多 >