F# - 卡不适合在控制台中显示

时间:2017-01-22 22:53:56

标签: unicode character-encoding f# codepages fsi

我在f#中制作基于控制台的纸牌游戏,而我正在努力使用unicode字符显示卡片套装。映射suit-to-char表示如下函数:

let suitSymbol = function
    | Spades   -> "\u2660"
    | Clubs    -> "\u2663"
    | Diamonds -> "\u2666"
    | Hearts   -> "\u2665"

使用

显示
printf "%s" <| suitSymbol Spades

在fsi中运行良好:

fsi
但是当使用fsc.exe编译时,它会显示不同的(不适合)字符:

cmd prompt

我尝试更改源文件的编码但没有效果。有什么办法可以在编译时使用吗?

EDIT(30.01.2017): Stuart的anwser是正确的,但我无法克服事实,它需要进入

chcp 65001

每当我想要运行我的游戏时。

在研究了在F#中引用DLL的方法之后,我提出了以下解决方案:

module Kernel =
    [<DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)>]
    extern bool SetConsoleOutputCP(uint32 wCodePageID)

在主要功能代码中我添加了

[<EntryPoint>]
let main args =
    Kernel.SetConsoleOutputCP 65001u |> ignore

它仅修改此进程的代码页,因此其他应用程序将正常运行。

1 个答案:

答案 0 :(得分:4)

在命令提示符下,您需要更改代码页,如下所示:

chcp 65001

经过一些测试后,我能够重现您的问题,并解决了这个问题。归功于@ s952163