显示字符串中的不可打印字符

新手上路,请多包涵

是否可以用十六进制值可视化 python 字符串中的不可打印字符?

例如,如果我有一个带有换行符的字符串,我想用 \x0a 替换它。

我知道有 repr() 会给我 … \n ,但我正在寻找十六进制版本。

原文由 georgij 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 716
2 个回答

您必须手动进行翻译;例如,使用正则表达式遍历字符串,并将每次出现的内容替换为等效的十六进制。

 import re

replchars = re.compile(r'[\n\r]')
def replchars_to_hex(match):
    return r'\x{0:02x}'.format(ord(match.group()))

replchars.sub(replchars_to_hex, inputtext)

上面的例子只匹配换行符和回车符,但是你可以扩展匹配的字符,包括使用 \x 转义码和范围。

 >>> inputtext = 'Some example containing a newline.\nRight there.\n'
>>> replchars.sub(replchars_to_hex, inputtext)
'Some example containing a newline.\\x0aRight there.\\x0a'
>>> print(replchars.sub(replchars_to_hex, inputtext))
Some example containing a newline.\x0aRight there.\x0a

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

我不知道有任何内置方法,但使用推导式很容易做到:

 import string
printable = string.ascii_letters + string.digits + string.punctuation + ' '
def hex_escape(s):
    return ''.join(c if c in printable else r'\x{0:02x}'.format(ord(c)) for c in s)

原文由 ecatmur 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题