一些背景首先:
我正在制作一个装置,把电子打字机转换成串行打印机/终端。(不要问为什么,我知道这实际上没有多大意义)
插在打字机控制器和键盘之间的设备。
它可以:
这样,我就可以使打字机以不同的方式工作:
对于串行打印机/终端模式,我想接受并理解一些ANSI (用于终端)、ESC/P、ESC/POS (用于打印机)转义序列,这取决于模式。
问题来了。因为设备是有限的,所以可以接受转义序列的一个非常小的子集,这是可以在打字机上执行的。我只想忽略任何不受支持的序列。
问题是序列有不同的长度。
当一个未被识别的序列到达时,是否有一种一般的方法来确定序列的长度是多少字节,这样我就知道要忽略多少个字符?(例如,一些基于第一个字符的简单规则?)
还是我不得不为所有可能的序列准备一个长的查找表(它占用宝贵的闪存空间),以便始终知道要忽略多少字节?
我想避免:
当然,我可以定义我自己的序列,但是我需要为我的设备定制一个驱动程序。我更喜欢使用现有的标准。
编辑以添加:@Raymond在下面的评论中显示,对于ANSI序列,可以检测到它们被终止的位置。所以这里没问题。然而,对于ESC/P序列(在打印机模式下),我没有注意到类似的方法来了解它。
发布于 2022-02-16 23:40:08
ESC/P和ESC/POS都有爱普生的规范,但它们只是事实上的标准,而不是标准化的标准。
其他将它们转移到别处的供应商不一定遵守它们,并且经常进行自己的扩展。
爱普生自己已经做了各种扩展,并且有一些规范,如ESC/P2、ESC/Page和ESC/Label(Zebra兼容?)。
例如,ESC/POS就在这里。
这是ESC/P。
如果你找其他地方,你会发现这些。
ESC/P2和FX命令
Esc/Pageコマンドリファレンス第4版会员注册是必需的。
它们的解释有松散的启发式格式,但是没有严格的标准化规则可以适用于所有人。
无论您想要稳定地解释所有文档中的命令,还是在一定程度上支持它们并放弃细节,您都有很多选择。
有一个像这样的工具可能是很有名的。
包括水电费 esc2text
esc2text从二进制ESC/POS文件中提取文本和换行符。
它还没有完成,但我自己正在制作这样的工具。
如果你搜索,将会有其他类似的工具。
https://stackoverflow.com/questions/71143625
复制相似问题