我只要一个反斜杠 - 不是两个

1 投票
4 回答
800 浏览
提问于 2025-04-16 01:53

我有一个字符串,打印出来是这样的:\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71

但是我想把这个字符串改成"\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71",这个字符串是不可打印的(因为我需要把它写入串口)。我知道问题出在'\'这个符号上。我该怎么把这个可打印的反斜杠替换成不可打印的呢?

4 个回答

1

你把字符串字面量的可打印表示和字符串本身搞混了:

>>> c = '\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71'
>>> c
'M\xff\xfd\x00\x02\x8f\x0e\x80fHq'
>>> len(c)
11
>>> len('\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71')
11
>>> len(r'\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71')
44
2

使用 decode()

>>> st = r'\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71'
>>> print st
\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71
>>> print st.decode('string-escape')
MÿýfHq

最后那一堆乱码是我在尝试打印你那个无法正常显示的字符串时,Python 输出的内容。

5

如果你想解码你的字符串,可以使用 decode() 方法,并把 'string_escape' 作为参数传进去。这样做会把你变量里的内容当作 Python 字符串来理解,就像你在代码里直接写的常量字符串一样。

mystr.decode('string_escape')

撰写回答