我正在从 mbed 上运行的 C++ 程序向 Windows 上的 PuTTY 发送 JSON。
我已经转义了字符 \
, /
, "
, \b
, \n
、\f
、\r
、\t
根据 json.org。
但是我还有三个不明白的怪癖:
- 窗口标题更改为部分输出。有时。
- 光标跳过“向上”并开始覆盖那里的内容。
- 类似于
\n
的换行符,但水平位置保持在行上方。
我认为 (3) 可能是 \v
,但是转义它并没有帮助,而且 JSON 规范没有要求我们转义它。
我做错了什么?
最佳答案
您会发现这不是您的应用程序,而是 putty 使用的实际终端仿真。
有几种方法可以缓解这种情况。
1) 如果您担心的只是标题搞砸了,那么只需禁用远程客户端更改标题即可。
打开Putty,在侧边菜单中进入“终端->功能”,在这个页面上你会找到“禁用远程控制窗口标题更改”,勾选它,你就不会再有问题了。
2) 如果还有更多内容,那么您需要深入研究“终端”和“窗口”设置部分。
尤其是窗口设置有许多您可以更改的地方,这些地方将影响 Putty 如何响应它认为是控制代码的内容。
例如在 Window->Translation 中,您可以强制使用远程字符集,或者告诉 putty 使用“+-=”作为画线符号而不是 ms-dos 框画集。
在“Terminal->Keyboard”中,您可以更改 putty 处理各种传入字符序列的方式。
我不知道你在 IT 行业工作了多久,但早在 Windows、HTTP 和 JSON 出现之前,终端执行的所有操作都由“控制代码”控制
这里的第一个图表:Ascii Chart
可以看出32之前的所有代码都有特殊含义。
有些诸如制表符(Ctrl 代码 9)和回车符(Ctrl 代码 13)今天仍在使用,但很多已经不使用了。添加到此 ANSI 控制代码标准
参见此处:Ansi Escape Codes这里:VT100 codes它经常用于为 BBS 系统制作基于文本的艺术作品(参见此处:Ansi Art on Wikipedia)
结果有点混搭,像 Putty 这样的终端仍将尝试在当今丰富的多媒体世界中进行解释。
像 JSON 这样的东西可以产生字符序列,有时会使 Putty 误以为它正在接收要对其执行操作的字符串,但其中缺少数据。与任何体面的终端仿真一样,它通常会尽其所能处理接收到的信息,但有时也会出错。
这就是为什么我认为,您的问题的解决方案在于调整终端响应设置等内容,以使腻子不会对事物做出如此严厉的 react 。
关于c++ - 如何阻止发送到 PuTTY 的字符破坏其标题/输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24532346/