我正在尝试用C#打印乌尔都语句子。假设我必须打印
10个苹果,20个橙子。从Google翻译获得此翻译只是为了详细说明我的查询。
在C#中,我有苹果和橘子的乌尔都语字符串。 Console.WriteLine()正确显示格式,尽管有????
所以我明白了,
???? 20 ???? 10
然而,当我看到打印预览时,我看到了: 10سیب,20سنتری
我正在通过在字符串变量的开头添加字符串来构造字符串。但是,打印时仍然显示不正确。
以下是示例代码:
static void Main(string[] args)
{
string apples = "سیب،";
string oranges = "سنتری";
// Creating Urdu string for 10 apples, 20 oranges. Urdu is read from right to left. So created the string accordingly
string _10_apples_20_oranges = oranges + " 20 " + apples + " 10";
Console.WriteLine("output: " + _10_apples_20_oranges);
string[] lines = { _10_apples_20_oranges };
System.IO.File.WriteAllLines(@"test.doc", lines);
}
test.doc文件包含 سنتری20سیب,10
这与上图中给出的预期输出不匹配。
任何指针都非常有用。
谢谢。
答案 0 :(得分:0)
在您的代码中,您正在以视觉顺序连接字符串片段:您知道要查看单词' oranges'在左边,所以你把它放在你的字符串的开头。然后从右到左以视觉顺序添加其他字符串片段。大多数知道双向文本显示问题的文本编辑器都希望输入逻辑顺序(在您的示例10中,苹果,20,橙子),并且一旦发现属于从右到左的字符脚本他们将尝试确定正确的视觉顺序,这是打印预览中发生的情况。控制台输出不支持bidi:它按逻辑顺序显示字体支持的字符(this answer提供解决方法)。
所以,问题不是你的代码,而是你的期望。要了解有关视觉与逻辑顺序的更多信息,您可以阅读this W3 article,但如果您想深入了解,可以学习Unicode Bidirectional Algorithm。