微软 Word 查找/替换突出显示的文本,在从右到左模式下,无法处理希伯来语和英语的混合文本

微软 Word 查找/替换突出显示的文本,在从右到左模式下,无法处理希伯来语和英语的混合文本

我有这个word文档

可以手动生成,也可以从以下网站下载 http://ge.tt/8zgZScd2使用 Firefox(Chrome 毫无理由地屏蔽了该网站)。或者您可以从以下网址下载这里

在此处输入图片描述

您会看到四组突出显示的字符。

第一个是希伯来语,然后是英语,从左到右模式。(LTR 模式)

第二、第三和第四个是英文,然后是希伯来语,从右到左模式。(RTL 模式)

我使用 ctrl 和左移进入 LTR 模式,使用 ctrl 和右移切换到 RTL 模式。

希伯来字母例如是unicode,\u05D0 א 但任何字母都可以。

这是查找和替换

在此处输入图片描述

因此,在“查找”部分,我输入了查找突出显示的文本。(如果单击该对话框左下角的格式..突出显示,则会出现该选项)

在替换部分,我XXX^&XXX 在 ms word 中写道^&,这是 ms word 表达大多数人所说的内容的方式,\0即它是找到的文本。所以我的查找和替换应该是找到突出显示的文本并保留它,但在它之前和之后放置一个 XXX。

这是查找/替换的结果

在此处输入图片描述

如您所见,第一个成功了。它是先使用希伯来语,然后使用英语和 LTR 模式。

第二、三和第四个都失败了。这些是从右到左模式依次为英语和希伯来语。

我希望查找/替换功能能对最后三个起作用,即第二、第三和第四个,以及从右到左模式下的英语和希伯来语。

添加

看起来有点像是将 XXX 包裹在希伯来语周围,但不清楚为什么。虽然这不是正在发生的事情/如何/为什么这样做。

Scott 建议使用替换字符串 FOO^&BAR 来尝试确定更多正在发生的事情,以便进行故障排除,并且它确实澄清了正在发生的事情。如果您אאאabc在 LTR 模式下,并将其替换为FOO^&BAR ms word 会看到并显示为 ,FOOאאאabcBAR一切都很好。如果您将其置于 RTL 模式下,它不会产生FOOabcאאאBARBARabcאאאFOO。它会产生abcBARאאאFOO(即它将 FOO BAR 混入其中)。它正在做什么,我想没有人会因为这样做而指责 ms word,它将 abcBAR 视为一个块。同样(更清楚),如果您在abcאאאRTL 中,并将其替换为,FOO^&BAR那么它会将其替换为,abcBARאאאFOO因为结尾是 abc 所在的位置,而 abc 的结尾在“c”之后,所以它会将 BAR 粘贴在那里。我会考虑如何处理这个问题,但这就是正在发生的事情。也许有某种空希伯来字符或从右到左的字符,我可以在“c”后面放置它们,这将“修复”这个问题,这样我就可以将 FOO..BAR 包裹在它周围。

答案1

上述行为在设计上是正确的,并且与双向文本支持的实现一致。

首先,根据我所理解的,针对您的要求给出一个解决方案。

如果您想用一些前缀和后缀包装这些 RTL 示例,并让它们在视觉上出现在原始突出显示文本的右侧和左侧,您可以在前缀后放置一个 RLM 控制字符,它就会按照您想要的方式运行。

您可以通过单击查找/替换对话框中的“特殊”按钮并选择 来添加 RLM RTL Mark,或者您也可以^r手动输入。我将使用文本PREPOST(而不是XXX您示例中的):

在此处输入图片描述

如果您将此“替换为”文本与您的某个 RTL 示例一起使用:

在此处输入图片描述

然后你会得到这个结果,我认为这就是你想要的结果:

在此处输入图片描述

那么发生了什么?

在您的 RTL 示例中,您的文本由两部分或两个“定向运行”组成。第一部分是 LTR 运行(“abcd”部分),第二部分是 RTL 运行(希伯来语“אאא”部分),它们都位于具有 RTL 基本方向的段落中。

当您将 LTR 前缀(替换示例中的第一个“XXX”)添加到 LTR 运行中时,您只是让该运行变长了一点,就像在第一个单词中添加了几个字母一样。由于 LTR 运行是从左到右绘制的,因此这些新字符会出现在它们应该出现的位置。如果您使用单词“stand”而不是“abcd”,然后添加前缀“UNDER”,则生成的单词将是“UNDERstand”(而不是“standUNDER”)。

为了帮助处理这种情况并手动解决一些歧义,Unicode 提供了“控制字符”,它们是不可见的标记,每个字符都有自己的作用或效果。

从右到左标记 (RLM) 的行为类似于 RTL 字符(想象一个零宽度字母“א”)。如果我们将该字符放在前缀之后,我们实际上会用希伯来语字符中断我上面描述的 LTR 运行。现在文本会按照您的要求进行视觉呈现,前缀首先出现在最右边,然后是我们的隐形希伯来语字符,然后是原始的“abcd”。

相关内容