F# - карты не отображаются в консоли

я делаю консольную карточную игру в f#, и я борюсь с отображением карточных костюмов, используя символы unicode. Отображение suit-to-char представляется в виде следующей функции:

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

отображение этого с помощью

printf "%s" <| suitSymbol Spades

отлично работает в fsi:

fsi
но при компиляции с помощью КФС.exe он отображает различные (не подходит) символы:

cmd prompt

Я попытался изменить кодировку исходный файл, но без эффекта. Есть ли способ, чтобы он работал при компиляции?

изменить (30.01.2017): Anwser Стюарта был прав, но я не мог смириться с фактом, что он должен был войти

chcp 65001

каждый раз, когда я хотел запустить свою игру.

после изучения способов ссылки на DLL в F#, я придумал следующее решение:

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

и в основном коде функции я добавил

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

она изменяет кодовую страницу для этого процесса только так другие приложения будут вести себя нормально.

1 ответов


в командной строке вам нужно будет изменить кодовую страницу следующим образом:

chcp 65001

после некоторого тестирования я смог воспроизвести вашу проблему, и это исправляет ее. Кредит на @s952163