从右到左语言支架反转

dan*_*ely 5 c# right-to-left

我在C#中使用StringBuilder来附加一些文本,可以是英文(从左到右)或阿拉伯文(从右到左)

stringBuilder.Append("(");
stringBuilder.Append(text);
stringBuilder.Append(") ");
stringBuilder.Append(text);
Run Code Online (Sandbox Code Playgroud)

如果text ="A",则输出为"(A)A"

但如果text ="بتث",则输出为"(بتث)بتث"

有任何想法吗?

Han*_*ant 9

当要求呈现从右到左文本,阿拉伯语或希伯来语时,这是Windows文本呈现引擎中的一个众所周知的缺陷.它有一个难以解决的问题,当语言中没有可用的替代词时,人们常常会回到西方语言和标点符号.例如品牌和公司名称.渲染器通过查看代码点来尝试猜测正确的渲染顺序,拉丁字符集中的字符显然必须从左到右呈现.

但它在标点符号上摸索,括号最明显.你必须明确它,所以它知道该怎么做,你必须使用Unicode从右到左标记,U+200F\u200f在C#代码中.相反,如果您知道需要LTR渲染,请使用从左到右的标记U+200E.