【发布时间】:2011-05-05 01:58:14
【问题描述】:
我正在用 C# 构建一个 telnet 应用程序(用于在老式 BBS 系统上编写门游戏脚本,例如 Wildcat),但似乎无法为 ANSI 转义码(例如光标移动、着色等)构建一个有效的解析器 - 几乎所有我测试过的系统会发送违反任何“标准”的未定义序列。关于这件事的资源似乎也很少,Wikipedia has the most in-depth list I've found so far 但即使他们说它不完整 - 我遇到的大多数其他网站都只是复制/粘贴了维基百科的文章。
我的问题:那里有图书馆吗?如果没有,一些解析代码/正则表达式怎么样?至少为ESC[!_ 之类的东西提供一些适当的文档会非常有帮助。
我真的觉得我在重新发明轮子,尤其是看到 Telnet 或多或少相当于互联网的轮子(至少在年龄方面;)
编辑:添加了一个奇怪的例子:
00000075h: 1B 5B 73 1B 5B 32 35 35 42 1B 5B 32 35 35 43 08 ; .[s.[255B.[255C.
00000085h: 5F 1B 5B 36 6E 1B 5B 75 1B 5B 21 5F 02 02 3F 48 ; _.[6n.[u.[!_..?H
00000095h: 54 4D 4C 3F 1B 5B 30 6D 5F 1B 5B 32 4A 1B 5B 48 ; TML?.[0m_.[2J.[H
000000a5h: 0C 0D 0A ; ...
The mysterious part is '21' in line 2 ---^^
【问题讨论】:
-
正确的文档是ECMA-48。不过,它所涵盖的内容不仅仅是移动光标并让内容变得丰富多彩。
-
您不太可能找到与维基百科不同的单一规范资源,因为每个终端处理 ANSI 代码的方式都不同。官方参考是ANSI standard(维基百科链接到),但这只会告诉你每个人都同意做什么,而不是实际做了什么。
标签: c# parsing telnet ansi-escape