gsub其实没有问题:
text <- dput("یہ جملہ ایک مثال کے لیے استعمال کیا جا رہا ہے")
"<U+06CC><U+06C1> <U+062C><U+0645><U+0644><U+06C1> <U+0627><U+06CC><U+06A9>
<U+0645><U+062B><U+0627><U+0644> <U+06A9><U+06D2> <U+0644><U+06CC><U+06D2>
<U+0627><U+0633><U+062A><U+0639><U+0645><U+0627><U+0644> <U+06A9><U+06CC>
<U+0627> <U+062C><U+0627> <U+0631><U+06C1><U+0627> <U+06C1><U+06D2>"
pattern <- dput("کیا جا")
"<U+06A9><U+06CC><U+0627> <U+062C><U+0627>"
replaceWith <- dput(paste0("<somemark>", pattern, "</somemark>"))
"<somemark><U+06A9><U+06CC><U+0627> <U+062C><U+0627></somemark>"
dput(gsub(pattern, replaceWith, text))
"<U+06CC><U+06C1> <U+062C><U+0645><U+0644><U+06C1> <U+0627><U+06CC><U+06A9>
<U+0645><U+062B><U+0627><U+0644> <U+06A9><U+06D2> <U+0644><U+06CC><U+06D2>
<U+0627><U+0633><U+062A><U+0639><U+0645><U+0627><U+0644> <somemark><U+06A9>
<U+06CC><U+0627> <U+062C><U+0627></somemark> <U+0631><U+06C1><U+0627>
<U+06C1><U+06D2>"
结果的呈现(一个包含从右到左和从左到右字符的字符串)对我来说也很合乎逻辑:
- 字符串的开头包含从右到左的字符,因此从右到左呈现
یہ جملہ ایک مثال کے لیے استعمال
- 然后字符串从左到右继续。它从左到右渲染并添加到末尾(之前渲染的左侧),
یہ جملہ ایک مثال کے لیے استعمال <somemark>
- 然后字符串从右到左字符继续。它从右到左渲染并添加到最后,
یہ جملہ ایک مثال کے لیے استعمال <somemark>کیا جا
- 然后字符串从左到右继续。它从左到右呈现并添加到最后,
یہ جملہ ایک مثال کے لیے استعمال <somemark>کیا جا</somemark>
- 最后字符串以从右到左的字符结尾。它从右到左呈现并添加到末尾。
یہ جملہ ایک مثال کے لیے استعمال <somemark>کیا جا</somemark> رہا ہے
在我看来,您对应该渲染什么的想法并不合乎逻辑,但我必须承认我没有从右到左文本渲染的经验。
无论如何,如果格式必须由渲染器解释,如 HTML 中的 <b>...</b> 标签,那么它可以完美地工作(在 markdown/html 中):
یہ جملہ ایک مثال کے لیے استعمال <b>کیا جا</b> رہا ہے
呈现为
یہ جملہ ایک مثال کے لیے استعمال کیا جا رہا ہے
我没有设法用闪亮的问号打印任何东西:
???? ???????? ?????? ???????? ???? ?????? ?????????????? <somemark>?????? ????</somemark> ?????? ????