F# - 卡片花色未显示在控制台中
F# - card suits not displaying in console
我正在用 f# 制作基于控制台的纸牌游戏,但我正在努力使用 unicode 字符显示纸牌套装。映射 suit-to-char 表示为以下函数:
let suitSymbol = function
| Spades -> "\u2660"
| Clubs -> "\u2663"
| Diamonds -> "\u2666"
| Hearts -> "\u2665"
显示此使用
printf "%s" <| suitSymbol Spades
在 fsi 中工作正常:
但是当使用 fsc.exe 编译时,它显示不同的(不适合)字符:
我试过更改源文件的编码但没有效果。编译后有什么办法让它工作吗?
编辑(2017 年 1 月 30 日):
斯图尔特的答案是正确的,但我无法接受事实,它需要输入
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
它仅修改此进程的代码页,因此其他应用程序将正常运行。
在命令提示符下,您需要像这样更改代码页:
chcp 65001
经过一些测试后,我能够重现您的问题,这解决了问题。感谢@s952163
我正在用 f# 制作基于控制台的纸牌游戏,但我正在努力使用 unicode 字符显示纸牌套装。映射 suit-to-char 表示为以下函数:
let suitSymbol = function
| Spades -> "\u2660"
| Clubs -> "\u2663"
| Diamonds -> "\u2666"
| Hearts -> "\u2665"
显示此使用
printf "%s" <| suitSymbol Spades
在 fsi 中工作正常:
但是当使用 fsc.exe 编译时,它显示不同的(不适合)字符:
我试过更改源文件的编码但没有效果。编译后有什么办法让它工作吗?
编辑(2017 年 1 月 30 日): 斯图尔特的答案是正确的,但我无法接受事实,它需要输入
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
它仅修改此进程的代码页,因此其他应用程序将正常运行。
在命令提示符下,您需要像这样更改代码页:
chcp 65001
经过一些测试后,我能够重现您的问题,这解决了问题。感谢@s952163