【问题标题】:Convert escape characters in strings (like "\\n" - two characters) into ASCII character (newline)将字符串中的转义字符(如“\\n” - 两个字符)转换为 ASCII 字符(换行符)
【发布时间】:2015-06-14 07:47:15
【问题描述】:

我的程序从命令行参数中得到一个字符串,其中包含许多转义字符。

./myprog.py "\x41\x42\n"

当我打印“sys.argv[1]”时。 我登上了屏幕:

\x41\x42\n

有没有一种简单的方法来代替程序打印:

AB[newline]

【问题讨论】:

  • 首先,AB[newline]是什么。其次,你试过sys.argv[1].encode('ascii')吗?
  • A 是“41”十六进制数的 ascii 字符。 B ... for "42" .... 我希望我的字符串能够像直接在 python 脚本中一样被处理。
  • 是的,我明白了。你能回顾一下我的回答吗?它能解决你的问题吗?
  • 是的,我尝试了 decode("hex") 和 decode("ascii")。两者都没有给出预期的结果。
  • 是的,这就是我想要打印的内容。但是我用 python2 和 python3 进行测试,当 "\x41\x42\n" 作为参数传递时,它对我不起作用

标签: python escaping


【解决方案1】:

传递给你的程序的字符串是'\\x41\\x42\\n'

我认为没有简单的方法可以将其恢复为 'AB\n'

您必须将字符串按'\\' 拆分,并分别处理每个元素。

如果你的字符串总是'\\x..\\x..\\x..\\n' 的形式,那么你可以这样做:

print ''.join([chr(int('0'+k,16)) for k in sys.argv[1].split('\\')[1:-1]])

【讨论】:

  • 当然,如果您是将该输入传递给您的程序的用户,那么@bshuster13 建议的答案是一个更好(更清洁)的解决方案。
【解决方案2】:

尝试通过以下方式传递参数:

./myprog.py $'\x41\x42\n'

$'...' 表示法允许与\x00 类似的转义序列一起使用,用于从十六进制表示法构造任意字节序列。

解决此问题的另一种方法是执行@Barak 建议的here - 即转换hex 字符。 这取决于你觉得什么对你来说很容易。

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多