如句:
عفوايبدوأنالنظاملايستطيعتحديدأنكمنعملاءSTCأملا,فإذاكنتعميلSTCالرجاءالضغطعلىزر “إعادةالمحاولة”,وإذالمتكنمنعملاءSTCالرجاءالضغطعلىزر“لستعميلSTC
阿拉伯语是RTL,英语是LTR。有时复制和粘贴后文本会变得混乱。当我在英语和阿拉伯语字符之间移动句子内的光标时,它会以一种非常奇怪的方式跳跃。而且我也对它如何存储在内存中感到困惑。任何人都可以帮忙解释一下吗?
答案 0 :(得分:6)
在内存中,这一切都存储为一系列Unicode代码点(希望之前有很多令人讨厌的东西,但是我们不要去那里) - 这就是文本本身,它是如何在计算机中表示的。文本首先与写作方向无关,它只是一系列字符。
此序列通过一个知道Unicode Bidi算法的渲染引擎,因此可以将文本整形为字形以显示在特定位置。 Unicode中的每个字符都有一个Bidi属性,可以控制它在这种上下文中的行为方式。这指定a
是LTR字符,而א
是RTL字符;它控制在RTL上下文中正确镜像括号(即使您看到(
),文本中的左括号仍为)
;并且在两个上下文中都可以出现多个字符。这一切都非常简单,那里有很多工作要做。最后,多个字形可以相互叠加(例如变音符号)或形成连字;那些是字素,这基本上就是我们所认为的“字母”。
光标移动很容易,因为光标只能在两个字形之间(在LTR或RTL段开始时会变得更复杂,但现在让它留在那里)和→< / kbd>将前进移动过来,而←向后移动。在RTL转发中,当然是 left ;它遵循文字方向。两个字素相对于彼此的顺序与定位光标无关。
我承认,看到混合的RTL和LTR文本可能会令人困惑,但我想阿拉伯语或希伯来语国家的人们已经习惯了。
关于复制粘贴文本时有时会丢失正确的文本布局的问题,我想最常见的问题是对相应脚本的应用程序或布局引擎支持。如果布局引擎不知道如何布局阿拉伯文本,则所有得到的字符都是从左到右的逻辑顺序。没有形成连字,没有应用文本方向。例如,浏览器现在对这种事情有很好的支持,但是如果我把阿拉伯语文本粘贴到Word中就会看起来不对(就像Word 2007一样; PowerPoint做得很好)。遗憾的是没有简单的解决方法,但通常你复制的文本完全相同,只是显示错误。
免责声明:我在Unicode邮件列表上潜伏了很长时间,但我绝不是这方面的专家。我说两种语言,两者都是平凡的布局。这是对我认为它可能起作用的回忆,也可能不是实际的事实。
答案 1 :(得分:3)