我有一個波斯語的Word文檔,裡面有很多這樣的短語:
我的問題是“?????”連接到“?????”的位置。
起初,它們之間似乎有一個零寬度非連接字符,但實際上當我嘗試複製它時,沒有複製任何內容。
我還將所有短語複製到記事本中,我得到了這個:「٩٩٩ههٌ」 正如你所看到的,前面的兩個單字之間沒有任何內容。
我在“主頁”選項卡的“段落”群組中打開了顯示/隱藏¶,以查看是否有任何隱藏字符,結果如下:
現在,我想知道是否有任何方法可以處理這個角色;例如用ZWNJ 替換它。
有這個問題的文件(另請閱讀下文)
答案1
這是我原來答案的完全替代品(原文如下)。
您的文件將單字標記為綠色(「複製您想要的方式的單字」)和紅色(「不複製您想要的方式的單字」)。
兩種類型都使用 ZWNJ,例如在 Heh 字元之前,該字元只能連接到左側,而不是右側。
不同的是,在綠字中,ZWNJ已經進入RTL,而在紅字中,它已經進入LTR。
我不知道您通常如何輸入ZWNJ,但在這裡,如果我從“符號”對話框的“特殊字元”窗格中選擇“無寬度可選分隔符”,則ZWNJ 將輸入LTR(在本例中是不好的),而如果我從「符號」對話框的字元表中選擇字元 0x200C,則會輸入 RTL(在本例中很好)。在Word 2010 中,如果我進入Word-> 文件選項-> 自訂功能區-> 鍵盤快速鍵-> 自訂... 並將按鍵指派給無寬度可選中斷,則在輸入RTL 文字時按該擊鍵似乎會插入ZWNJ 作為 RTL(好)。您可以如下分配:
- 在類別清單中,向下捲動到“常用符號”並選擇它
- 在顯示的常用符號清單中,選擇“無寬度可選中斷”
- 按一下「按新快捷鍵」框
- 按你想要的快捷鍵(我用ctrl-9當實驗)
- 點擊分配
- 點選關閉
我不知道這是否會實現您需要的一切,但我認為它至少解釋了正在發生的事情。
(我懷疑是這樣的,但我必須另存為 .docx 並查看 XML。「綠色單字」被編碼在帶有「運行屬性」RTL 的單字「運行」中(運行是 s 序列)具有相同特徵的字符,因此如果更改文字顏色,將會有一個新的運行)。
要將 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 (如果確實如此)替換為空格(選擇一個空格,您應該能夠按空格鍵來執行此操作),這將使記事本顯示正確的字元形式。
從 Word 文件中的一個點複製到另一個點應該會保留 ZWNJ,但這就是您所看到的嗎?
答案2
今天我找到了另一種方法來解決這個問題。訣竅是將 NWOB(前後各有一個字元)替換為自身,然後 Word 就可以解決這個問題...
- 找什麼:
(?)^o(?)
- 用。
\1^o\2
- 不要忘記
Use wildcards
在More >>
窗格旁勾選複選標記
然後它會將 LTR ZWNJ 更改為類似矩形的模式,並將 RTL 更改為我所期望的。