2016-05-12 113 views
3

像Notepad ++這樣的現代文本編輯器可以直觀地顯示控制字符,如CRLF,STX,ETX,EOT。我開始懷疑文本編輯器如何巧妙地將這些角色可視化。如何可視化控制字符

visualization of CRLF characters

注:我所熟悉的編碼和字符集是如何工作的。而且我也很熟悉這些角色存在的原因。

一些想法:

  1. 是否應用特殊字體這些特定字符? 即包含全部個字符的表示的字體。

  2. 或者是否使用高級文本字段控件/ gui組件在畫布上呈現(即繪製)它們?

  3. 還是隻是替換字符? (例如,將0x0D替換爲unicode字符0x240D) 這似乎是最容易的。但是,它如何保持複製文本仍然保留原文本的事實。

原因我的問題:我想創建一個Java應用程序,做同樣的事情。

+0

相關應用程序將查看文本中的控制字符,並將它們轉換爲字符串以進行顯示。例如。 '0x0D' ='CR' – jr593

+0

請參閱我的問題的第2點。 「但是然後...」 – bvdb

+0

您可以使用此替代方法:http://stackoverflow.com/a/43416931/2073804 – ron190

回答

1

字形('圖像')分配給控制代碼存在一些固有問題;大部分都與他們已經有特殊用途的情況有關!例如,如果您將製表符代碼發送到您的顯示器,您通常希望光標移動一定數量的位置,而不會看到彈出的字符

此外,通常,字體使用Unicode作爲其本機編碼。的Unicode不允許字形要被分配給所述控制代碼:

六十五代碼點(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

對於需要什麼,看到一個很好的概述詹姆斯·布朗的Design & Implementation of a Win32 Text Editor;它着重於使用Win32 API調用,但也有很多背景。繪製整齊的控制代碼在Enhanced Drawing & Painting部分解決。