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