printfn不会产生国际(非拉丁)字符的预期结果

时间:2013-07-07 17:04:58

标签: f#

我有以下程序:

let txt = "إتصالات"
printfn "Text is: %s" txt
0 // return an integer exit code

txt的值设置为某些阿拉伯字符。当我运行程序时,控制台上显示的是一堆问号而不是字符。在Visual Studio 2012调试器中,正在为txt变量显示正确的字符。

我做错了什么以及如何正确展示国际角色?

1 个答案:

答案 0 :(得分:9)

根据How to write unicode chars to console?,您需要在控制台上设置OutputEncoding属性,如下所示:

System.Console.OutputEncoding <- System.Text.Encoding.Unicode
let txt = "إتصالات"
printfn "Text is: %s" txt
0 // return an integer exit code

该问题的答案值得一读,因为它还描述了为什么需要将控制台字体更改为真正使其工作,以及如何操作。

以下是一些包含更多信息的其他链接:

更新:由于示例中的阿拉伯文本在StackOverflow上渲染得很好,我偷看了CSS,看看他们用来渲染预格式化文本的字体。使用该列表和Windows字符映射工具(开始 - &gt;所有程序 - &gt;附件 - &gt;系统工具 - &gt;字符映射),我发现Courier New字体(随Windows附带)支持阿拉伯字符。如果您在“Windows控制台和TrueType字体”链接(上面)中使用注册表黑客,则应该能够将Courier New添加为可在控制台中使用的字体。