我正在Windows上从一个运行在mbed上的C ++程序向PuTTY发送JSON。
我已经转义了字符\
,/
,"
,\b
,\n
,\f
,\r
,\t
根据json.org。
但我还有三个我不理解的怪癖:
\n
之外的换行符,除了水平位置以外,都是从上线开始的。我认为(3)可能是\v
,但是逃避这个没有帮助,而且,JSON规范并没有要求我们逃避它。
我做错了什么?
答案 0 :(得分:2)
输出中的某个位置是更改终端硬状态行的字符序列,PuTTY显示为其标题。在许多终端上,该序列是
ESC ] 0 ; TitleString BEL
其中ESC
和BEL
是ASCII转义和铃声字符。
其他奇怪的行为是由相似的序列引起的。
我建议您通过od
或类似的内容运行输出,看看是否有不可打印的字符。
答案 1 :(得分:2)
您会发现它不是您的应用程序,而是putty正在使用的实际终端仿真。
有几种方法可以缓解这种情况。
1)如果只是标题搞砸了你的担心,那么只需禁用远程客户端更改标题。
打开Putty,然后转到"终端 - >功能"在侧边菜单中,在此页面上,您将找到"禁用远程控制窗口标题更改",勾选该项,您将不再有任何问题。
2)如果它还有更多,那么你需要在"终端"中进行挖掘。和" Window"设置部分。
特别是窗口设置有许多可以改变的地方,这些地方会影响Putty如何响应它认为的控制代码。
在Window->翻译中,您可以强制使用远程字符集,或者告诉putty使用" + - ="作为线条图符号,而不是ms-dos框图集。
在"终端 - >键盘"你可以改变putty如何处理各种传入的char序列。
我不知道您在IT部门工作了多长时间,但早在Windows和HTTP和JSON的日子之前,终端执行的所有内容都由"控制代码&#控制34;
此处的第一个图表:Ascii Chart
您可以看到32之前的所有代码都具有特殊含义。
今天仍然使用了一些诸如制表符(Ctrl代码9)和回车符(Ctrl代码13),但很多都不是。添加到ANSI控制代码标准
请参阅此处:Ansi Escape Codes和此处:VT100 codes,其中经常用于制作BBS系统的基于文本的艺术作品(请参阅此处:Ansi Art on Wikipedia)
结果有点混乱,像Putty这样的终端仍然会尝试在今天的丰富多媒体世界中诠释。
像JSON这样的东西可以产生一系列字符,这些字符有时可能会让Putty误以为它接受要接受的字符串,但却缺少数据。就像任何体面的终端仿真一样,它通常会尽可能地利用它收到的东西,并且有时会弄错它。
这就是为什么我认为,你的问题的解决方案在于调整终端响应设置之类的东西,以使腻子不会对事情做出如此严厉的反应。