下の写真はすべてを説明しています:
代替テキストhttp://img133.imageshack.us/img133/4206/accentar9.png
変数textInputはから来てFile.ReadAllText(path);
おり、:'éè...のような文字は表示されません。UnitTestを実行すると、すべて問題ありません。見えます…なんで?
.NET クラス (System.IO.StreamReader
など) は、デフォルトのエンコーディングとして UTF-8 を使用します。別のエンコーディングを読みたい場合は、これを明示的に適切なコンストラクターのオーバーロードに渡す必要があります。
また、「ANSI」と呼ばれるエンコーディングは 1 つだけではないことにも注意してください。おそらく、「西欧」とも呼ばれる Windows コードページ 1252 のことを指しているのでしょう。これは、他の国の Windows の既定のエンコードとは異なることに注意してください。System.Text.Encoding.Default
これは、実際にはシステムごとに異なるため、使用しようとするときに関係があります。
/EDIT:あなたは私の答えと私のコメントの両方を誤解しているようです:
だから、最後に:あなたの問題の解決策は次のコードでなければなりません:
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 です。
NUnitで動作する理由はわかりませんが、NotePad ++でファイルを開くと、ANSIがその形式で表示されます。今、私はUTF-8に変換し、それは機能します。
なぜコンソールではなくNUnitで動作していたのか疑問に思っていますか?しかし、少なくとも今は機能します。
更新 質問がまだ良いので、なぜ私が質問に反対票を投じるのかわかりません。コンソールではANSIファイルを読み取ることができないのに、NUNitでは読み取ることができるのはなぜですか。