Ich mache ein Konsolenkartenspiel in f # und ich kämpfe mit der Anzeige von Kartenanzügen mit Unicode-Zeichen. Mapping-Anzug-to-Zeichen wird als folgende Funktion dargestellt:F # - Kartenanzüge, die nicht in der Konsole angezeigt werden
let suitSymbol = function
| Spades -> "\u2660"
| Clubs -> "\u2663"
| Diamonds -> "\u2666"
| Hearts -> "\u2665"
Die Darstellung dieser mit
printf "%s" <| suitSymbol Spades
funktioniert gut in fsi:
aber wenn kompiliert fsc.exe es angezeigt mit diffrent (nicht suit) Zeichen:
Ich habe versucht, Codierung der Quelldatei zu ändern, aber ohne Wirkung. Gibt es eine Möglichkeit, dass es funktioniert, wenn es kompiliert wird?
EDIT (2017.01.30): Stuart anwser war richtig, aber ich konnte nicht über Tatsache erhalten, dass es
chcp 65001
jedes Mal, wenn ich mein Spiel laufen wollte Eingabe erforderlich.
Nach Wegen der Referenzierung DLLs in F # zu studieren, kam ich mit folgenden Lösung:
module Kernel =
[<DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)>]
extern bool SetConsoleOutputCP(uint32 wCodePageID)
Und in Code Hauptfunktion Ich habe
hinzugefügt[<EntryPoint>]
let main args =
Kernel.SetConsoleOutputCP 65001u |> ignore
Es Codepage für diesen Prozess modifiziert nur, damit sich andere Apps normal verhalten.
Ich vermute, dass dies mit verschiedenen Schriftarten zu tun ist verwendet werden (obwohl sie sehr ähnlich aussehen). – Stuart
Nachdem Sie es mit fsc kompiliert haben, wo laufen Sie es, und was sind Ihre Schriftarteinstellungen? – Stuart
Es ist die gleiche Schriftart. Beide Screenshots stammen aus demselben Konsolenfenster. Es ist consolas laufen von cmd. – Muchtrix