2017-01-22 7 views
8

私はコンソールベースのカードゲームをf#で作っています。私はユニコード文字を使ってカードスーツを表示するのに苦労しています。マッピングスーツツー文字は、関数を次のように表される:F# - カードスーツがコンソールに表示されない

printf "%s" <| suitSymbol Spades 

を使用して、この表示

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

はFSIで正常に動作します:

fsi
しかしときに表示されるfsc.exe使用してコンパイル異なる(not suit)chars:

cmd prompt

私はソースファイルのエンコーディングを変更しようとしましたが、効果はありません。コンパイル時に動作する方法はありますか?

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 

を追加しました主な機能コードには、このプロセスのコードページを変更します他のアプリは正常に動作します。あなたはこのようなあなたのコードページを変更する必要がありますあなたのコマンドプロンプトで

+0

私はこれが、(非常によく似ているにもかかわらず)使用されている別のフォントであると思われます。 – Stuart

+0

fscでコンパイルした後、どこで実行していますか、フォント設定は何ですか? – Stuart

+0

これは同じフォントです。どちらのスクリーンショットも同じコンソールウィンドウからのものです。それはcmdから実行されるconsolasです。 – Muchtrix

答えて

4

chcp 65001 

いくつかのテストの後、私はあなたの問題を再現することができたが、これはそれを修正します。 @ s952163への寄付

関連する問題