我一整天都在努力解决这个问题.我似乎无法在网上找到答案.我有一个yaml文档,为我的消息/响应服务器存储一些服务器配置,其中一个参数是"message_terminator".正如您所猜测的那样,这是我的服务器知道要查找的客户端发送的消息的消息终止符.
\r\n
Run Code Online (Sandbox Code Playgroud)
是telnet发送的默认值,所以我已经设置了它.
Yaml文件:
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: \r\n
Run Code Online (Sandbox Code Playgroud)
我想要做的是读取message_terminator值作为实际的回车和换行或将其从其字符串表示转换为其二进制转义码:return和换行,而不是字符串表示"\ r \n"
例如,如果我在python中:
print('\r\n')
Run Code Online (Sandbox Code Playgroud)
它打印回车和换行符,而不是字符.但是,如果我从python中读取yaml配置中的值:
print(config['global']['message_terminator'])
Run Code Online (Sandbox Code Playgroud)
它打印出来的字符:
\r\n
Run Code Online (Sandbox Code Playgroud)
更改Yaml文档并添加如下引号:
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: '\r\n'
Run Code Online (Sandbox Code Playgroud)
和
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: b'\r\n'
Run Code Online (Sandbox Code Playgroud)
甚至
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: !!str \r\n
Run Code Online (Sandbox Code Playgroud)
要么
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: !!python/bytes b'\r\n'
Run Code Online (Sandbox Code Playgroud)
没有效果.打印出消息终止符时,它会打印字符.当它通过网络发送给客户端时,它的字符.
我也尝试过这样的事情:
print(bytes(config['global']['message_terminator'], 'utf-8').encode('unicode_escape'))
Run Code Online (Sandbox Code Playgroud)
它仍然只打印出人物.
请原谅我,如果我完全错了或者遗漏了一些大事.我仍在研究字符串,字节,原始字符串等之间的所有区别.欢迎任何建议或指示.谢谢你的时间.
编辑@Jan:当它在解释器中执行时,它可以工作.我打印了一个马车和换行符.不是人物.
>>> text = """
... val: "hello\\n\\rnew line"
... """
>>> text
'\nval: "hello\\n\\rnew line"\n'
>>> print(text)
val: …Run Code Online (Sandbox Code Playgroud)