python - 为什么我的 python 格式 %s 不占用空间?

标签 python

我正在使用 PyCrypto,我似乎成功地解密了我的数据。但是,我收到的字符串似乎表现得很奇怪:

...
plaintext = cipher.decrypt(encrypted)
print 'plaintext length is %u' % len(plaintext)
print 'plaintext: %s' % plaintext
print 'plaintext is "%s"' % plaintext

明文有我期望的字符串(“POEorOPE”),但输出看起来很奇怪:

plaintext length is 16
plaintext: POEorOPE
plaintext is ""OEorOPE

为什么第三个 print 语句中的字符串似乎占用了零空间,因此它的第一个字符被我认为是结束引号的内容覆盖了?我现在以明文形式存储的内容是否还有其他问题?

编辑:

感谢您的评论,我知道发生了什么。 (虽然我不知道为什么我的字符串中有退格字符。)

print repr(plaintext)

'POEorOPE\x08\x08\x08\x08\x08\x08\x08\x08'

最佳答案

一些(非常古老的)软件使用了一个巧妙的技巧来通过“加倍字符”来模拟粗体文本:打印字符,退格,然后再次打印字符。复制会产生更大、更暗的字形。

您的字符串应为 8 个字符,但显示的 len 为 16。这是因为添加了 8 个 unicode 代码点(“\x08”)(可能是解密过程的一部分)。

unicode 点“\x08”确实代表退格键。为了说明这些仅仅是无意义的 unicode 点:

>>> u = u'POEorOPE\x08\x08\x08\x08\x08\x08\x08\x08'
>>> print u.encode()
POEorOPE

关于python - 为什么我的 python 格式 %s 不占用空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583127/

相关文章:

python - 替换逗号分隔字符串中间的下划线分隔子字符串

python - sphinx-build 安装在 Mac OS-X 中的哪里?

python - 如何测试django中的编辑功能? (错误 django.db.utils.IntegrityError : NOT NULL constraint failed)

python - OpenCV imread 透明度消失了

python - 带列表的高效正则表达式

python - 为什么使用 dict.keys?

python - 我如何让怪物存在于 def main() 战斗(怪物)中

python - 尝试从 Pycharm 安装 sklearn 时出错 | arrayobject.h 不能是绝对的

python - 正则表达式匹配变量并从python中的匹配行获取引号内的单词

python - 标准库模块中的函数何时称为内置函数?