3

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

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

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

4

3 に答える 3

3

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

また、「ANSI」と呼ばれるエンコーディングは 1 つだけではないことにも注意してください。おそらく、「西欧」とも呼ばれる Windows コードページ 1252 のことを指しているのでしょう。これは、他の国の Windows の既定のエンコードとは異なることに注意してください。System.Text.Encoding.Defaultこれは、実際にはシステムごとに異なるため、使用しようとするときに関係があります。

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

  1. コードの問題は、使用しているエンコーディングを .NET に伝える必要があることです。
  2. 「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 です。

于 2008-10-18T13:45:50.810 に答える
1

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

于 2008-10-18T15:44:07.747 に答える
-1

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

なぜコンソールではなくNUnitで動作していたのか疑問に思っていますか?しかし、少なくとも今は機能します。

更新 質問がまだ良いので、なぜ私が質問に反対票を投じるのかわかりません。コンソールではANSIファイルを読み取ることができないのに、NUNitでは読み取ることができるのはなぜですか。

于 2008-10-18T13:24:07.607 に答える