如何可视化控制字符?

4
现代文本编辑器(如Notepad ++)可以可视化控制字符,例如CRLFSTXETXEOT。我开始想知道这些字符是如何被编辑器如此整洁地可视化的。

visualization of CRLF characters

注意:我熟悉编码和字符集的工作原理,也了解这些字符存在的原因。

一些想法:

  1. 它是否为这些特定字符应用了特殊字体?即包含所有字符表示的字体。

  2. 还是使用了高级文本字段控件/gui组件在画布上呈现(即绘制)它们?

  3. 还是只是替换字符?(例如将0x0D替换为Unicode字符0x240D,即) 这似乎是最简单的方法。但是,它如何保留复制文本仍保持原始文本的事实。

我提出问题的原因:我想创建一个Java应用程序,做同样的事情。


有关的应用程序将查看文本中的控制字符,并将它们转换为要显示的字符串。例如 0x0D = 'CR'。 - jr593
但是然后... - bvdb
你可以使用这个替代方案:https://dev59.com/ZIHba4cB1Zd3GeqPO0J1#43416931 - ron190
2个回答

3
第三个想法应该是正确的,你可以使用合适的字体将字符替换为Unicode控制图片

2
将文本翻译成中文:

给控制码分配“字形”('images')存在一些固有问题,其中大多数与它们已经具有特定用途的情况有关!例如,如果您向显示器发送一个Tab代码,您通常会期望光标移动一定数量的位置,而不是看到一个字符出现。

此外,通常情况下,字体使用Unicode作为其本地编码。 Unicode不允许将字形分配给控制码:

65个代码点(U + 0000-U + 001F和U + 007F-U + 009F)被保留为控制代码(https://en.wikipedia.org/wiki/Unicode

有一种“别名”类型的集合定义:U + 2400到U + 241F表示0x000x1f,U + 2420“␠”表示“空格符号”,U + 2421“␡”表示“删除符号”(您的#3),但是您需要确保用户拥有包含这些字形的字体。

最灵活的方法是“手动”绘制您喜欢的任何内容。这意味着您可以使用任何字体(无需特殊字体),并且不需要字符替换(只需要绘图代码过滤“特殊”字符)。不过,缺点是您还需要负责绘制常规文本。
如果这太复杂,或者您对文本绘制区域没有足够的控制,您可以仅为控制字符使用不同的前景色和背景色。这是我写的一个快速而简单的十六进制查看器的屏幕截图 - 我只在此更改颜色,但我也可以为所有字符编写自定义文本。

QuikRead display dialog

一个好的概述,请参阅詹姆斯布朗的Win32文本编辑器的设计与实现;它专注于使用Win32 API调用,但也有很多背景知识。绘制整洁的控制代码在增强绘图和绘画部分中得到了解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接