开发者

I want one backslash - not two

开发者 https://www.devze.com 2023-01-09 05:14 出处:网络
I have a string that after print is like this: \\x4d\\xff\\xfd\\x00\\x02\\x8f\\x0e\\x80\\x66\\x48\\x71

I have a string that after print is like this: \x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71

But I want to change this string to "\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71" which is not printable (it is necessary to开发者_运维问答 write to serial port). I know that it ist problem with '\'. how can I replace this printable backslashes to unprintable?


If you want to decode your string, use decode() with 'string_escape' as parameter which will interpret the literals in your variable as python literal string (as if it were typed as constant string in your code).

mystr.decode('string_escape')


Use 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

That last garbage is what my Python prints when trying to print your unprintable string.


You are confusing the printable representation of a string literal with the string itself:

>>> 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


your_string.decode('string_escape')
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号