私はコンソールベースのカードゲームをf#で作っています。私はユニコード文字を使ってカードスーツを表示するのに苦労しています。マッピングスーツツー文字は、関数を次のように表される:F# - カードスーツがコンソールに表示されない
printf "%s" <| suitSymbol Spades
を使用して、この表示
let suitSymbol = function
| Spades -> "\u2660"
| Clubs -> "\u2663"
| Diamonds -> "\u2666"
| Hearts -> "\u2665"
はFSIで正常に動作します:
しかしときに表示されるfsc.exe使用してコンパイル異なる(not suit)chars:
私はソースファイルのエンコーディングを変更しようとしましたが、効果はありません。コンパイル時に動作する方法はありますか?
EDIT(2017年1月30日):それは
chcp 65001
私は私のゲームを実行したいたびに入力する必要があること、 スチュアートのanwserは正しかったが、私は事実を乗り越えることができませんでした。
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
を追加しました主な機能コードには、このプロセスのコードページを変更します他のアプリは正常に動作します。あなたはこのようなあなたのコードページを変更する必要がありますあなたのコマンドプロンプトで
私はこれが、(非常によく似ているにもかかわらず)使用されている別のフォントであると思われます。 – Stuart
fscでコンパイルした後、どこで実行していますか、フォント設定は何ですか? – Stuart
これは同じフォントです。どちらのスクリーンショットも同じコンソールウィンドウからのものです。それはcmdから実行されるconsolasです。 – Muchtrix