質問

下の図はすべてを説明しています:

代替テキストhttp://img133.imageshack.us/img133/4206/accentar9 .png

変数textInputは、 File.ReadAllText(path); および次のような文字から取得されます。 'é è ...表示しません。 UnitTestを実行すると、すべて問題ありません!見えます...なぜですか?

役に立ちましたか?

解決 3

NUnitで機能する理由がわかりませんが、NotePad ++でファイルを開くと、ANSI形式で表示されます。今、私はUTF-8に変換し、それが動作します。

なぜコンソールではなくNUnitで動作していたのでしょうか?しかし、少なくとも現在は動作しています。

更新 質問にまだ投票できなかった理由がわかりません。質問がまだ良いので、なぜコンソールではANSIファイルを読み取れませんが、NUNitではできますか。

他のヒント

.NETクラス( System.IO.StreamReader など)は、デフォルトのエンコードとしてUTF-8を使用します。別のエンコーディングを読み取りたい場合は、これを適切なコンストラクタオーバーロードに明示的に渡す必要があります。

また、“ ANSI”と呼ばれる単一のエンコーディングはありません。おそらく“ Western European”というWindowsコードページ1252を参照しているのでしょう。これは、他の国のWindowsのデフォルトエンコーディングとは異なることに注意してください。これは System.Text.Encoding.Default を使用しようとする場合に関連します。これは実際にはシステムごとに異なるためです。

/ EDIT:あなたは私の答えとコメントの両方を誤解しているようです:

  1. コードの問題は、使用しているエンコーディングを.NETに伝える必要があることです。
  2. もう1つの発言、“ ANSI” 異なるエンコーディングを参照している可能性がありますが、問題とは何の関係もありませんでした。それはただ“ちなみに”誤解を防ぐための発言(まあ、それは裏目に出た)。

最後に、問題の解決策は次のコードにする必要があります:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

ここで重要な部分は、適切な System.Text.Encoding インスタンスの使用です。

ただし、これはエンコードが実際にWindows-1252であると想定しています(ただし、これはNotepad ++が“ ANSI”によって意味するものだと思います)。 NUnitで読み取ったときにテキストが正しく表示される理由はわかりません。 NUnitには、テキストエンコーディング用の何らかの自動検出があるか、NUnitが奇妙なデフォルト(つまり、UTF-8ではない)を使用していると思います。

ああ、ところで:“ ANSI”本当に“ American National Standards Institute”を指します。 “ ANSI”を持つ完全に異なる標準がたくさんあります。名前の一部として。たとえば、C ++は(とりわけ)ANSI標準でもあります。

一部のコンテキストでのみ、Windowsエンコーディングの参照に(不正確に)使用されます。しかし、ここでも説明しようとしましたが、通常は特定のエンコーディングではなく、Windowsがさまざまな国のデフォルトとして使用するエンコーディングのクラスを指します。これらの1つはWindows-1252です。

chcp を使用して、コンソールsessinの出力コードページを設定してみてください。コマンド。 Windowsがサポートするコードページは、こちらこちら、およびこちら。基本的に、コンソールは非常にシンプルです。コードページを使用して表示されるグリフを決定することにより、UNCICODEまたはDBCS文字を表示します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top