2016-07-03 19 views
1

Excelから生成されたcsvファイルでCsvProviderを使用しています。 csvファイルには、正しく読み込まれないドイツ語の特定の文字( 'ä'、 'ö'、...)が含まれています。"ä"、 "ö" ...のエンコーディングが正しく動作しません

UTF8エンコーディングでストリームを使用し、MS-DOS形式でExcelファイルを ".csv"、 ".csv"として保存しましたが、結果は常に同じでした。ここで

減少コードサンプル:ここに

open FSharp.Data 

type MyCsvProvider = CsvProvider<"Mappe1.csv",Separators=";"> 

[<EntryPoint>] 
let main argv = 
    let csvDatas = MyCsvProvider.Load("..\..\Mappe1.csv") 

    for i in csvDatas.Rows do 
     printfn "Read: Beispiel='%s' and Änderungsjahr='%d" i.Beispiel i.``�nderungsjahr`` 

    0 

対応するたcsvfile:ここ

Beispiel;Änderungsjahr 
Data1;2000 
Überlegung;2010 

と実行後の結果:

Read: Beispiel='Data1' and Änderungsjahr='2000 
Read: Beispiel='?berlegung' and Änderungsjahr='2010 
+0

正しいタイトルは、 "ä"、 "ö"、...のエンコーディングは正しく動作しません " –

+0

ファイルではどのようなエンコーディングが使用されていますか? –

+0

私はExcelを見ていましたが、そこにはエンコードオプションはありません...現在、私はファイルを定義するためにExcelを使用し、次に.csvとして保存します...これ以上は行いません...ドイツ語のローカライズされたWindows 10を使って、私は何も変えなかった。 CSVを生成する際に、どこかのエンコードオプションが欠けていましたか? –

答えて

0

私はF#のにないんだけど、しかし、私は、コンソールのロケール設定になると考えています。ブレークポイントを設定し、文字列のデバッガで実際のバイト値を確認します。

例えば、Überlegungは、デバッガからこの値を取得した場合0xDCがASCII Codeの場合、コンソールロケールのみを設定する必要があります。

ロケールの設定については、so questionを参照してください。これは、C++であっても、環境に適応できるものでなければなりません。

+0

これは実際のF#+ FShap.Dataトピックです...コンソールはUTF-8情報を提供することができます(「Änderungsjahr」の「Ä」は実行結果に表示されます)。私はそれがFsharp.dataライブラリが.csvファイルを解析する方法だと思う...それは正しいエンコーディングを取らないし、それを修正する方法がわからない... –

0

OK、問題が見つかりました:エクセルでCSVを使用すると、多かれ少なかれASCIIが生成されますが、UTFは生成されません。使用する書式は「Unicode(Text)」であり、実際のUnicodeを生成します。「\ t」は区切り文字ではなく「;」です。または '、'。私のための作品...したがって、私は質問を閉じる...すべてに感謝!

+0

ASCIIは、常に悪い考えである、ローカライズされたOSか否か。 –

関連する問題