1

我正在尝试用 C# 打印乌尔都语句子。假设我必须打印

10个苹果,20个橙子。

我的期望是,它应该打印出来(好吧,我什至不能在这里输入)乌尔都语翻译

从谷歌翻译得到这个翻译只是为了详细说明我的查询。

在 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

这与上图中给出的预期输出不匹配。

任何指针都会非常有用。

谢谢你。

4

1 回答 1

0

在您的代码中,您按视觉顺序连接字符串片段:您知道要在左侧看到单词“oranges”,因此将其放在字符串的开头。然后按照从右到左的视觉顺序添加其他字符串片段。大多数意识到双向文本显示问题的文本编辑器都希望按逻辑顺序输入(在您的示例中,10,苹果,20,橙子),一旦他们发现属于从右到左脚本的字符,他们将尝试确定正确的视觉顺序,这就是您的打印预览中发生的事情。控制台输出不支持双向:它按逻辑顺序显示字体支持的那些字符(此答案提供了一种解决方法)。

所以,问题不是你的代码,而是你的期望。要了解更多关于视觉顺序与逻辑顺序的信息,您可以阅读这篇 W3 文章,但如果您更喜欢深入研究,您可以研究Unicode 双向算法

于 2015-12-02T13:41:00.183 回答