2012-03-06 14 views
6

私はかなりシンプルでなければならないことをしようとしていますが、あまりにも多くの時間を費やしてしまいましたが、私は研究したが役に立たないいくつかのアプローチを試みました。C#UTF8読み込み/出力

基本的には、UTF8文字セットの「特殊な」文字を持つ膨大な名前のリストがあります。

私の最終目標は、各名前を読み込み、URLのその名前をGET変数として使用してHTTP要求を行うことです。

最初の目標は、ファイルから1つの名前を読み込み、文字列を作成してすべてのHTTP要求を行う前に、UTF8を正しく読み書きできることを確認することでした。私は、ファイルを読み込むために、このC#のコードを使用

Öwnägé

:私が作った

test1.txtファイルには、ちょうどこの内容が含まれています。私はStreamReaderエンコーディングを設定し、Console.OutputEncodingUTF8に設定しました。私の驚いたことに

static void Main(string[] args) 
{ 
    Console.OutputEncoding = System.Text.Encoding.UTF8; 

    using (StreamReader reader = new StreamReader("test1.txt",System.Text.Encoding.UTF8)) 
    { 
     string line; 

     while ((line = reader.ReadLine()) != null) 
     { 
      Console.WriteLine(line); 
     } 

    } 

    Console.ReadLine(); 
} 

私はこのような出力を得る:

enter image description here

の予想される出力は、元のファイルの内容とまったく同じです。

私はHTTPリクエストを作成するために構築しようとしている文字列が、読み書き可能なUTF8文字列として単純なタスクを実行できない場合はどうすればよいでしょうか?

答えて

6

あなたのプログラムは結構です(入力ファイルを想定している実際にはUTF-8)。プログラムをデバッグし、Watchウィンドウを使用して文字列(line変数)を調べると、正しいことがわかります。 そのは、正しいHTTPリクエスト(またはあなたが文字列で行うその他のもの)を送信する方法を確実にする方法です。

あなたが見ているのは、Windowsコンソールのバグです。

幸い、ラスタフォントにのみ影響します。 TrueTypeフォントを使用するようにコンソールウィンドウを変更すると、 ConsolasまたはLucida Consoleを使用すると、問題は解決します。

screenshot

あなたは「デフォルト」メニュー項目使用して、すべての将来のウィンドウのためにこれを設定することができます。あなたのようなすべての文字を読み取るための

screenshot

+1

+1これは正しいです。また、NotepadのデフォルトであるANSIではなく、UTF-8を使用してサンプルファイルを保存していることを確認してください。 – Yuck

+0

これは、ファイルを保存するときにANSIの代わりにUTF-8を選択したことを確認するためのYuckの提案と組み合わせて使用​​しました。あなたは私に確信している頭痛の多くを救ってくれてありがとう! – user17753

3

あなたは、.NET 4を使用している場合は、

Console.InputEncoding = Encoding.Unicode; 
    Console.OutputEncoding = Encoding.Unicode; 

を使用して、コンソールフォントとしてルシーダコンソールを使用していることを確認する必要がありますReading unicode from console

を参照してください。

.NET 3.5を使用している場合は、おそらく運が悪いです。

は、効率的に私はおそらく使用したファイルから行を読み込むには:

foreach(var line in File.ReadAllLines(path, Encoding.UTF8)) 
{ 
    // do stuff 
} 
+0

私はそれをテストすると 'IOException'エラーが発生します。 – Yuck

+0

例外のメッセージは何ですか? – Phil

+0

*パラメータが間違っています。*これは最初の 'Console.InputEncoding = Encoding.Unicode;'にあります。 .NET 4を使用する。 – Yuck

1

をあなたはこのようにデフォルトエンコーディングを使用する必要があります言及

new StreamReader(@"E:\database.txt", System.Text.Encoding.Default)) 
関連する問題