【问题标题】:Character code pages: control code page assignment that means "the next rendered character (in this source code) is escaped?"字符代码页:控制代码页分配,表示“下一个呈现的字符(在此源代码中)被转义?”
【发布时间】:2016-05-17 12:00:15
【问题描述】:

我承认这个问题可能无法回答或极难回答。

此外,尽管我希望这些观众熟悉转义序列,例如脚本语言是,为了清楚起见,您将在本文后面看到,我将回顾一下这个概念:

“转义”是指例如可打印字符,这些字符被解释为“不要像往常一样使用下一个字符;在另一个上下文中解释它”。上下文包括不被解释为代码的字符,而是作为文字打印字符,或者相反,通常可以被解释为我们想要解释为代码的文字字符的字符。我的例子(更令人困惑,我现在意识到)使用后一种情况。

具体示例:与 'nix sed 一起使用的正则表达式,当不为 sed 转义时,是这样的:

([^0-9]*)(20[0-9]{2})([^0-9]{1,2})([0-9]{1,2})

但是,当 shell 转义以将正则表达式传递给 sed 以便 sed 知道将字符解释为不是文字字符而是作为正则表达式代码时,整个字符串变得更加丑陋(并且更不可读):

\([^0-9]*\)\(20[0-9]\{2\}\)\([^0-9]\{1,2\}\)\([0-9]\{1,2}\)

转义字符(或序列)是编程的祸根之一。对于长字符串(或代码行)尤其如此,在这种情况下,只有特别注意和/或使用创建和删除转义序列的工具才实用。

我环顾四周,没有遇到像我建议的那样的解决方案,但不知道如果它存在可能会被命名为什么,而且不是专家,搜索是徒劳的。

我所说的“控制代码页分配”之类的东西是指计算机用来呈现和控制文本布局等的可打印(和不可打印)字符表的代码页。 ,如the wikipedia article on "Code Pages" 中所述。如果您愿意,您可以(粗略地)将这些称为“计算机字母”。我所说的“代码页分配”是指计算机“字母表”中的条目被解释为呈现的字形(可打印字符)或未打印的控制代码(不可打印字符)。

这个想法是指定一个特定的、未打印的控制代码页分配来表示“将下一个字符解释为转义”,文本渲染器可以“读取”并通过更改例如指示给程序员。控制代码后面的转义字符的颜色和/或亮度。和/或控制代码页分配可以是一个可打印的字形,例如一个标准化的、非侵入性的重音字形,它不会与与罗马字母相关的任何字母表中的任何其他重音相冲突。

解释器和编译器也可以类似地读取此未打印的代码页分配。

假设一个比我上面给出的更长的正则表达式的渲染版本:

如果我们有一个未打印的代码页分配意味着“下一个字符被转义”,例如,转义字符可以简单地渲染得更亮,以表明它们被转义:

对于人类来说,解释(尽管这很难从正则表达式开始)比使用打印字符作为转义序列的以下内容要容易得多:

在我写这篇文章时,如果不是普遍情况,主要的情况是在转义序列中使用打印字符,而不是未打印的代码页分配。

建议的解决方案的附带问题是确保程序员使用的许多工具与转义代码页分配的一致性。程序员还必须知道哪些实用程序支持转义代码页分配,哪些不支持。此外,任何采用这种代码页分配的工具最好明确说明它们是否向后兼容(它们是否可以同时使用打印字符和未打印的代码页分配用于转义序列)。

更喜欢通过转义控制代码页分配以外的任何方式完成此任务的任何编程语言或工具。尽管如此,我对任何可以做到这一点的工具都非常好奇。

因此,在所有这些之后,我的问题是:有哪些编程语言可以做到这一点,和/或是否已经有代码页分配可以做到这一点?

【问题讨论】:

  • 我忘了提到另一个让我想要这个建议的解决方案的问题:在某些设置中,不同的字符需要不同的转义字符(DOS 那样可怕);这将消除查找或记住哪些字符转义哪些字符的需要。但是,引出此处给出的答案,可以提供一个足够可配置的编辑器来了解转义序列(包括不同字符的不同序列)并漂亮地打印它们;它也可以配置为建议它们。

标签: escaping programming-languages codepages scripting-language unicode-escapes


【解决方案1】:

我不知道有任何编程语言可以执行您的建议。以不可打印的文本格式存储程序的问题在于,您的用户只能使用能够理解该特定不可打印文本格式的工具。

另外,假设您选择了一个特定的、不可打印的控制字符来指示转义字符。那么,您将如何方便地键入它们?如果您需要键入特殊键来转义字符,则可以轻松地将其设置为反斜杠。毕竟,您可以像打印不可打印字符一样轻松地打印可打印字符——只要您设计语言语法,以便您的智能编辑器能够正确识别哪些文字需要打印。

【讨论】:

  • 对,你提到了我描述的问题“..确保符合这么多工具的转义代码页分配..”你还提到了一个我本来想但忘记的问题:怎么会这样键入不可打印的转义字符?这是我提出的这个解决方案提出的另一个问题。你让我想起另一个让我渴望我提出的解决方案的问题,我将在对我的问题的评论中提到。是的,正如 svick 还提到的,一个可配置的编辑器可以漂亮地打印转义序列。
【解决方案2】:
  • 据我所知,几乎所有编程语言都坚持使用可打印的 ASCII 字符*。
  • ASCII 中已经有一个特殊的转义控制字符,不出所料,称为 Escape 或 ESC(与 Esc 键的相似性并非偶然),代码 27 或 0x1B。但是这个字符已经不再这样使用了。
  • 我认为您可以通过语法突出显示非常接近您想要的内容。
  • 如果您愿意打破您正在编辑的文件中的字节与您在屏幕上看到的字符之间的直接对应关系,那么我认为\ 可以继续作为转义字符。您只需要找到一个足够可配置的编辑器并按照您想要的方式进行配置。

* 我能想到的两个主要例外在这里并不有趣:APL 有自己的一组符号和支持标识符中的 Unicode 的语言。

【讨论】:

  • “在标识符中支持 Unicode 的语言”:你的意思是像 Java、C#、VB.NET、JavaScript 等等。
  • 谢谢。在我标记一个已接受的答案之前,我将等待几天让很多眼球仔细阅读这个问题(但如果事实证明任何编程语言都这样做,我会感到非常惊讶)。如果我还找到一种将其配置为例如的方法,则语法突出显示可以很好地工作。稍微改变编辑“认为”可能是未转义字符的字符颜色,并且(类似于我写的)相当亮化疑似未转义字符和肯定转义字符。
猜你喜欢
  • 2021-06-21
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多