我整天都在与这个问题作斗争。我在网上也找不到答案。 我有一个yaml文档,它为我的消息/响应服务器存储了一些服务器配置,其中一个参数是“消息终结者”。您可以猜到,这就是我的服务器知道要查找的客户端发送的消息的消息终止器。
\r\n
是telnet发送的默认值,因此我将其设置为默认值。
Yaml文件:
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: \r\n
我要做的是将消息结束符值读取为实际的回车和换行符,或者将其从字符串表示形式转换为二进制转义代码:回车和换行符,而不是字符串表示形式“\r\n”
例如,如果我使用python:
print('\r\n')
它打印回车和换行符,而不是字符。 但是,如果我从python中的yaml配置中读取值:
print(config['global']['message_terminator'])
它打印出字符:
\r\n
更改Yaml文档并添加引号,如:
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: '\r\n'
以及
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: b'\r\n'
甚至
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: !!str \r\n
或者
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: !!python/bytes b'\r\n'
没有效果。 当消息结束符打印出来时,它会打印字符。 当它通过网络发送到客户端时,它的字符。
我也尝试过这样的事情:
print(bytes(config['global']['message_terminator'], 'utf-8').encode('unicode_escape'))
它仍然只是打印出字符。
如果我完全错了或者错过了什么大事,请原谅。 我还在计算字符串、字节、原始字符串等之间的全部区别。 欢迎任何建议或指点。 谢谢你的时间。
编辑@Jan: 什么时候在翻译程序中这样做才有效。我得到了一辆马车和一条新闻线。 不是角色。
>>> text = """
... val: "hello\\n\\rnew line"
... """
>>> text
'\nval: "hello\\n\\rnew line"\n'
>>> print(text)
val: "hello\n\rnew line"
>>> import yaml
>>> data = yaml.load(text)
>>> data
{'val': 'hello\n\rnew line'}
>>> print(data['val'])
hello
new line
>>>
但在我的主代码中,当我从yaml文件加载时,它打印的不是实际的回车和换行符。 此python代码:
TERM = config['global']['message_terminator']
print(TERM)
print(config['global']['message_terminator'])
print("netcmd server started on port", PORT)
在终端中打印:
$ python3 netcmd.py
\r\n
\r\n
netcmd server started on port 7040
为了澄清,我想要回车和换行的动作,而不是字符表示。
编辑2: 问题解决了。在Jan更新之后,我从以下位置更改了yaml文件:
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: "\\r\\n"
到
global:
server_port: 7040
bound_ip: 0.0.0.0
message_terminator: "\r\n"
现在一切正常,python代码打印出一个实际的回车和从yaml文件读取的换行符。
YAML允许使用\字符转义,但必须将值放入引号中:
因此,使用
global
的文件将按如下方式工作:Section 5.7 of YAML spec 1.2:
5.7条。转义字符
所有不可打印的字符都必须转义。YAML转义序列使用大多数现代计算机语言通用的“\”符号。必须将每个转义序列分析为适当的Unicode字符。原始转义序列是表示细节,不能用于传递内容信息。
请注意,转义序列只能用双引号标量来解释。在所有其他标量样式中,“\”字符没有特殊含义,不可打印字符不可用。
相关问题 更多 >
编程相关推荐