如何阻止发送到PuTTY的字符与其标题/输出拧紧?

时间:2014-07-02 11:39:10

标签: c++ json

我正在Windows上从一个运行在mbed上的C ++程序向PuTTY发送JSON。

我已经转义了字符\/"\b\n\f\r\t根据json.org。

但我还有三个我不理解的怪癖:

  1. 窗口标题更改为部分输出。有时。
  2. 光标向上跳过并开始覆盖那里的内容。
  3. 除了\n之外的换行符,除了水平位置以外,都是从上线开始的。
  4. 我认为(3)可能是\v,但是逃避这个没有帮助,而且,JSON规范并没有要求我们逃避它。

    我做错了什么?

2 个答案:

答案 0 :(得分:2)

输出中的某个位置是更改终端硬状态行的字符序列,PuTTY显示为其标题。在许多终端上,该序列是

ESC ] 0 ; TitleString BEL

其中ESCBEL是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误以为它接受要接受的字符串,但却缺少数据。就像任何体面的终端仿真一样,它通常会尽可能地利用它收到的东西,并且有时会弄错它。

这就是为什么我认为,你的问题的解决方案在于调整终端响应设置之类的东西,以使腻子不会对事情做出如此严厉的反应。