F# - карты не отображаются в консоли
я делаю консольную карточную игру в f#, и я борюсь с отображением карточных костюмов, используя символы unicode. Отображение suit-to-char представляется в виде следующей функции:
let suitSymbol = function
    | Spades   -> "u2660"
    | Clubs    -> "u2663"
    | Diamonds -> "u2666"
    | Hearts   -> "u2665"
отображение этого с помощью
printf "%s" <| suitSymbol Spades
отлично работает в fsi:

но при компиляции с помощью КФС.exe он отображает различные (не подходит) символы:
Я попытался изменить кодировку исходный файл, но без эффекта. Есть ли способ, чтобы он работал при компиляции?
изменить (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
            