如何可视化控制字符

时间:2016-05-12 08:41:31

标签: java user-interface fonts

像Notepad ++这样的现代文本编辑器可以显示控制字符,如CRLFSTXETXEOT。我开始怀疑文本编辑如何如此整洁地可视化这些字符。

visualization of CRLF characters

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

一些想法:

  1. 对这些特定字符应用特殊字体吗? 即包含所有字符表示的字体。

  2. 或者是否使用高级文本字段控件/ gui-component 在画布上呈现(即绘制)它们?

  3. 或者只是替换字符? (例如,使用unicode字符0x0D替换0x240D,即) 这似乎是最简单的。但是,它如何保留复制文本仍然保留原始文本的事实。

  4. 我的问题的原因:我想创建一个执行相同操作的java应用程序。

2 个答案:

答案 0 :(得分:3)

第三个想法应该是真的,你可以使用正确的字体用unicode control pictures替换字符。

答案 1 :(得分:2)

字形('图像')分配给控制代码存在一些固有问题;大部分都与他们已经有特殊用途的情况有关!例如,如果您向显示器发送标签代码,则通常希望光标移动一定数量的位置,而不是看到弹出的字符

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

  

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

有一个'别名'定义的集合类型:0x000x1f的U + 2400到U + 241F,U + 2420"␠" for" space for#34;和U + 2421"␡" for"删除符号" (你的#3)但是你需要确保用户有一个包含这些字形的字体。

最可配置的方式是手动'画任何你喜欢的东西。这意味着您可以使用您想要的任何字体(无需特殊字体),并且不需要替换字符(只有图形代码需要过滤掉特殊字体')。但缺点是,您还负责绘制常规文本。

如果这是过度杀伤,或者您对文本绘制区域没有足够的控制权,则只能为控制字符使用不同的前景色和背景色。这是我刚才写的一个快速而又脏的十六进制查看器的屏幕截图 - 我只在这里更改颜色,但我也可以为所有人写出自定义文本。

QuikRead display dialog

要详细了解所需内容,请参阅James Brown的Design & Implementation of a Win32 Text Editor;它侧重于使用Win32 API调用,但也有很多背景知识。在Enhanced Drawing & Painting部分中提到了绘制整齐的控制代码。