【发布时间】:2019-09-03 01:32:56
【问题描述】:
我有一个 API 要求对我的 XML 属性中的引号进行转义,因此
我尝试过遍历我的字符串,例如:
b'<?xml version=\'1.0\' encoding=\'utf8\'?>\n<tx><cmd id="1">SetChLevel</cmd><name>C</name><value>30</value></tx>'
每次遇到 " (ascii 34) 时,我都会用转义字符 (ascii 92) 和另一个引号替换它。令人发指的是:
b'<?xml version=\'1.0\' encoding=\'utf8\'?>\n<tx><cmd id=\\"1\\">SetChLevel</cmd><name>C</name><value>30</value></tx>'
逃脱的地方。作为健全性检查,我将 92 替换为任何其他字符,它按预期工作。
temp = b'<?xml version=\'1.0\' encoding=\'utf8\'?>\n<tx><cmd id="1">\
SetChLevel</cmd><name>C</name><value>30</value></tx>'
i = 0
j = 0
payload = bytearray(len(temp) + 4)
for char in temp:
if char == 34:
payload[i] = 92
i += 1
payload[i] = 34
i += 1
j += 1
else:
payload[i] = temp[j]
i += 1
j += 1
print(bytes(payload))
我会假设字符 92 会出现一次,但有些东西正在逃脱!
【问题讨论】:
-
我做了一个测试,似乎 bytes() 正在添加转义。
-
明确一点,
bytes()没有添加任何内容,但是打印到屏幕上的内容添加了内容,因为打印它的功能添加了内容。