不可能在 aleph 后面放一个零?

Gma*_*ith 144 unicode

我和一个朋友在拿 aleph 开玩笑。在尝试输入 ?0 (切换这 2 个字符)时,他们切换了自己!任何符号序列都不会阻止这种效果。为什么是这样!??

尝试使用 0 和 ? 反转(c&p 为?):

?0

? - 0

? \\\ 0

? -./ 0

然而,文字将它们分开

? foob​​ar 0

我在 arch linux 上,还没有在任何其他操作系统上测试过

编辑:数字不必为零。它适用于数字,但不适用于字母。

use*_*686 196

Aleph ( U+05D0 ) 是一个希伯来字母,而希伯来字母是从右到左书写的,因此 Unicode 将其指定为“从右到左”双向类。(有关更多详细信息,请参阅Unicode TR9:双向算法。)

拉丁字母当然是“从左到右”。但是,零 ( U+0030 ) 属于“欧洲数字”双向类,这是一个类——而 LtR 默认情况下,如果在它之前有一个“强”从右到左字符,它可以切换到 RtL。(参见双向字符类型解决TR9 中的弱类型。)

结果,整个单词的beforeafter的方向交换了——如果你把零放在 'before' 上,它会显示在右边;如果你在 aleph 之后写零,它会出现在左边。

  • 这是在许多文本编辑器和网站中输入希伯来语时非常常见的问题 - 我想其他从右到左的语言也是如此。随着时间的推移它肯定会变得更好,但是想象一下尝试写一个单词问题 - 反复在希伯来语单词(如 aleph 字符)和数字(如 0 字符)之间来回切换...... (14认同)
  • @Walt:我认为可能存在误解。如果我输入一个拉丁语 (LTR) 词,然后是一个希伯来语 (RTL) 词,然后是另一个拉丁语词,我可以自由地将它们全部放在一个句子中,并且只有希伯来语词呈现 RTL。这一切都旨在轻松地放入同一个句子中。问题是 LTR 和 RTL 语言都使用数字“0”,因此软件只是使其与前一个字母的方向相同。如果它跟在 LTR 字符之后,那就是 LTR。如果它跟在 RTL 字母之后,那就是 RTL。还有覆盖来交换它。http://www.fileformat.info/info/unicode/char/202d/index.htm (5认同)
  • 零不会变成 RTL - 它仍然是 LTR,即使周围有希伯来语,一系列数字也会从左到右显示,但嵌入级别以这样一种方式相互作用,即零显示在左侧按内存顺序在其前面的希伯来字符。(Unicode 双向性很复杂。) (4认同)
  • @Walt 我见过的大多数教科书都是“沉浸式”类型,它使用非常简单的希伯来语,但几乎完全是希伯来语。使用一种语言来教授语言似乎有悖常理,但它可以更有机地积累语言技能。您可能会看到内联音译或翻译(类似于 http://lh4.ggpht.com/-_Vc8TUDwznQ/UlhaLFjnrGI/AAAAAAAAzQk/_zm4BMC0aLw/talam_thumb.jpg?imgmax=800 - "Shalom Kita Aleph" = "Hello First Grade") (3认同)

IS4*_*IS4 109

'?', 'HEBREW LETTER ALEF' (U+05D0)具有 BIDI(双向)类“从右到左 [R]”,因为希伯来语传统上是从右到左书写的。另一方面,数字没有分配给它们的特定方向,因此整个 aleph 和零块被解释为从右到左。在这种情况下,后面的字符可能不一定位于前面字符的右侧,因为 Unicode 相当复杂的双向规则规定。

您有多种选择可以解决此问题。

  1. 您可以使用'?', 'ALEF SYMBOL' (U+2135)。它是一个符号,具有从左到右的属性:?0。

  2. 除了通常的 digit 0,您可以使用具有从左到右方向性的类似零的字符,例如'?', 'IDEOGRAPHIC NUMBER ZERO' (U+3007)

  3. 最简洁的方法是在 aleph 之后使用“左到右标记”(U+200E)字符(维基百科):“? 0”。这是一个不可见的零宽度字符,定义为具有从左到右的方向性。因此,它对双向文本布局算法的影响与在 ? 后面插入一个从左到右的拉丁字母相同,只是那里不会出现可见的字母。

  • 在数学上下文中(我希望是这样), U+2135 是正确使用的字符。 (72认同)
  • 您必须小心覆盖 - 当您希望它们在其上操作的上下文完成时,将它们放置在文本中的位置很重要(使用“流行方向格式”字符`U+202C`)删除它们。 (10认同)
  • @Random832 所有这些都是矫枉过正。您真正需要的只是一个 [从左到右的标记](https://en.wikipedia.org/wiki/Left-to-right_mark) (U+200E) 在 alef 和零之间。这样你也不需要任何额外的“流行”字符。 (10认同)
  • 此外,“覆盖”字符有点矫枉过正,“嵌入”对于这个用例就足够了。还有一个名为“isolate”的新类,不确定在这种情况下有什么区别。 (4认同)
  • 我建议交换2和3。 (4认同)
  • @NH。同意,如果您正在编写数学而不是希伯来语文本,那么数学 alef 符号肯定是最佳选择。通过“所有这些”,我指的是我正在回复的评论中提到的 Unicode bidi 嵌入/覆盖/隔离字符。所有这些都太过分了,一个简单的 `‎` 就可以做到。 (2认同)

wvx*_*xvw 21

也许,实现这一目标的更好方法是:

echo -e "\u200F0?"
Run Code Online (Sandbox Code Playgroud)

和强制性的 xkcd 参考https://xkcd.com/1137/

轻轨


Set*_*eth 14

完全有可能在前面有一个零,如下面在 Notepad++ 中制作的示例所示。

与 0 的 Alef

如果您尝试标记问题中的字符,您所看到的并且也变得显而易见的是,希伯来语是从右到左书写的,并且(因为 0 直接连接)文本是从右到左(而不是左)处理的向右)方式。

请参阅第二个示例,了解 Firefox(在我这边)有明确选择的问题。

Firefox 选择从右到左的文本

  • 这是一个糟糕的建议,因为它以实际的角色排序来玩游戏,以获得特定的视觉排序。其他答案解释了为什么会发生这种情况,有些答案包括处理它的正确方法(覆盖和明确的方向标记)。 (17认同)
  • 你能指出我在哪里包括某种形式的建议吗?我只是展示了一个发生了什么的例子,确实可以有一个后缀数字并提供关于它为什么会发生的信息。 (8认同)

Eug*_*eck 13

希伯来语是从右到左书写的 - 这使得 aleph 字符携带信息,即下一个字符应该打印在它的左边

如果您对文档进行十六进制检查(或在合适的编辑器中使用箭头键在文本中移动光标),您会注意到,您首先到达 alpeh,然后到达数字。

即:假设“下一个字符 == 右边的字符”不成立。