首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安全忽略未知ANSI,ESC/P,ESC/POS序列,知道长度

安全忽略未知ANSI,ESC/P,ESC/POS序列,知道长度
EN

Stack Overflow用户
提问于 2022-02-16 14:25:16
回答 1查看 269关注 0票数 0

一些背景首先:

我正在制作一个装置,把电子打字机转换成串行打印机/终端。(不要问为什么,我知道这实际上没有多大意义)

插在打字机控制器和键盘之间的设备。

它可以:

  • 让键盘通过,透明地,
  • 获取按键,无论是否阻止打字机看到它们,
  • 插入其他按键。

这样,我就可以使打字机以不同的方式工作:

  • 普通打字机,
  • 打字机通过串口记录每一个输入字符,
  • 串行打印机,
  • 串行终端。

对于串行打印机/终端模式,我想接受并理解一些ANSI (用于终端)、ESC/P、ESC/POS (用于打印机)转义序列,这取决于模式。

问题来了。因为设备是有限的,所以可以接受转义序列的一个非常小的子集,这是可以在打字机上执行的。我只想忽略任何不受支持的序列。

问题是序列有不同的长度。

当一个未被识别的序列到达时,是否有一种一般的方法来确定序列的长度是多少字节,这样我就知道要忽略多少个字符?(例如,一些基于第一个字符的简单规则?)

还是我不得不为所有可能的序列准备一个长的查找表(它占用宝贵的闪存空间),以便始终知道要忽略多少字节?

我想避免:

  • 忽略序列后面的实际有效数据,而不打印它。
  • 将转义序列的部分打印在纸上
  • 将未知序列的部分解释为新序列的开始

当然,我可以定义我自己的序列,但是我需要为我的设备定制一个驱动程序。我更喜欢使用现有的标准。

编辑以添加:@Raymond在下面的评论中显示,对于ANSI序列,可以检测到它们被终止的位置。所以这里没问题。然而,对于ESC/P序列(在打印机模式下),我没有注意到类似的方法来了解它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-16 23:40:08

ESC/P和ESC/POS都有爱普生的规范,但它们只是事实上的标准,而不是标准化的标准。

其他将它们转移到别处的供应商不一定遵守它们,并且经常进行自己的扩展。

爱普生自己已经做了各种扩展,并且有一些规范,如ESC/P2、ESC/Page和ESC/Label(Zebra兼容?)。

例如,ESC/POS就在这里。

TM打印机ESC/POS命令参考

这是ESC/P。

爱普生ESC/P参考手册

如果你找其他地方,你会发现这些。

ESC/P - Wikipedia

ESC/P2和FX命令

ESC/标签命令参考指南-爱普生

Esc/Pageコマンドリファレンス第4版会员注册是必需的。

它们的解释有松散的启发式格式,但是没有严格的标准化规则可以适用于所有人。

无论您想要稳定地解释所有文档中的命令,还是在一定程度上支持它们并放弃细节,您都有很多选择。

有一个像这样的工具可能是很有名的。

ESC/POS命令行工具

包括水电费 esc2text esc2text从二进制ESC/POS文件中提取文本和换行符。

它还没有完成,但我自己正在制作这样的工具。

EscPosUtils

如果你搜索,将会有其他类似的工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71143625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档