MS Word 中隐藏的格式符号

MS Word 中隐藏的格式符号

我有一个波斯语的 Word 文档,其中有很多这样的短语:

我的问题是“و نشیب”与“هایی”的连接位置。

起初,它们之间似乎有一个零宽度非连接字符,但实际上,当我尝试复制它时,什么都没有复制。

我还将整个短语复制到记事本中,得到了这个:“و نشیبهایی”正如你所见,前面两个单词之间没有任何内容。

我打开了“主页”选项卡的“段落”组中的显示/隐藏¶ 来查看是否有任何隐藏字符,结果如下:

现在,我想知道是否有任何方法可以使用这个字符;例如用 ZWNJ 替换它。

存在该问题的文件(另请参阅下文)

答案1

这完全替代了我的原始答案(原文如下)。

您的文档将单词标记为绿色(“按您想要的方式复制的单词”)和红色(“不按您想要的方式复制的单词”)。

两种类型都使用 ZWNJ,例如,在 Heh 字符前面,该字符只能连接到左侧,而不能连接到右侧。

区别在于,在绿色字中,ZWNJ 已输入 RTL,但在红色字中,它已输入 LTR。

我不知道您通常如何输入 ZWNJ,但在这里,如果我从“符号”对话框中的特殊字符窗格中选择“无宽度可选分隔符”,则 ZWNJ 会以 LTR 输入(在本例中为坏的),而如果我从“符号”对话框中的字符表中选择字符 0x200C,则它会以 RTL 输入(在本例中为好的)。在 Word 2010 中,如果我进入 Word->文件选项->自定义功能区->键盘快捷键->自定义... 并为无宽度可选分隔符分配一个按键,则在输入 RTL 文本时按下该按键似乎会将 ZWNJ 插入为 RTL(好的)。您可以按如下方式分配它:

  • 在类别列表中,向下滚动到“常用符号”并选择它
  • 在显示的常用符号列表中,选择“无宽度可选中断”
  • 点击“按新快捷键”框
  • 按下你想要的快捷键(我使用 ctrl-9 作为实验)
  • 点击分配
  • 点击关闭

我不知道这是否能满足您的所有需求,但我认为它至少解释了发生了什么。

(我怀疑它是类似的东西,但我必须将其保存为 .docx 并查看 XML。“绿色单词”被编码为具有“运行属性”RTL 的单个 Word“运行”(运行是具有相同特征的字符序列,因此如果您更改文本颜色,就会有一个新的运行)。红色单词被编码为三个运行:两个包含文本的 RTL 运行和一个包含 ZWNJ 字符的非 RTL 运行。)

要将 LTR ZWNJ 更改为 RTL ZWNJ,您应该能够使用以下 VBA。(对于了解 VBA 的人来说,这是您必须使用 Selection 而不是 Range 的情况之一,因为据我所知,将 Run 设置为 RTL 文本的唯一方法是通过 Selection 对象的 RTLRun 方法):

Sub replace_LTR_NBZWs_with_RTL_ones()

ActiveDocument.Select
With Selection.Find
  .ClearFormatting
  .Text = ChrW(8204)
  .Forward = True
  .Wrap = wdFindStop
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchKashida = False
  .MatchDiacritics = False
  .MatchAlefHamza = False
  .MatchControl = False
  .MatchByte = False
  .MatchWildcards = False
  .MatchSoundsLike = False
  .MatchAllWordForms = False
  While .Execute
    Selection.RtlRun
  Wend
End With
End Sub

我的回答原文如下……

可能一个 ZWNJ 。如果选中它,然后单击“插入”->“符号”->“更多符号”,则应该选中 ZWNJ (0x200C)。它与 Microsoft 在“符号”对话框的“特殊字符”窗格中称为“无宽度可选分隔符”的字符相同。

据我所知,NotePad 会忽略 ZWNJ。我怀疑您必须用空格(选定一个,您应该可以按空格键来执行此操作)替换 ZWNJ(如果是的话),这样 NotePad 才能显示正确的字符形式。

从 Word 文档中的一个点复制到另一个点应该保留 ZWNJ,但这是您看到的吗?

答案2

今天我找到了另一种方法来解决这个问题。诀窍是将 NWOB(前后各一个字符)替换为其本身,然后 Word 就可以解决问题了……

  • 找什么:(?)^o(?)
  • 用。。。来代替:\1^o\2
  • Use wildcards不要忘记在More >>窗格旁边打勾

然后它会将 LTR ZWNJ 更改为矩形模式,并将 RTL 更改为我预期的模式。

相关内容