web-dev-qa-db-ja.com

StreamReaderを使用した外部文字の読み取りのC#ヘルプ

以下のコードを使用して、外来文字を含むテキストファイルを読み取ります。ファイルはANSIでエンコードされており、メモ帳では問題なく表示されます。以下のコードは機能しません。ファイル値が読み取られてデータグリッドに表示されると、文字が四角として表示されますが、別の場所に別の問題がありますか?

StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))

ありがとう

更新1System.Text.Encodingの下にあるすべてのエンコーディングを試しました。すべてがファイルを正しく表示できません。

更新2:ファイルのエンコードをユニコードに変更し(ファイルを保存し直し)、System.Text.Encoding.Unicodeを使用しましたが、正常に機能しました。では、なぜメモ帳はそれを正しく読んだのですか?そして、なぜSystem.Text.Encoding.UnicodeはANSIファイルを読まなかったのですか?

58
Scott

はい、ファイルの実際のエンコード、おそらくユニコードで可能です。 Unicodeエンコードの最も一般的な形式であるUTF-8を試してください。それ以外の場合、ファイルASCIIの場合、標準ASCIIエンコードが機能するはずです。

23

また、現在のシステムのANSIコードページを使用するデフォルトエンコーディングを試すこともできます。

StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)

元のファイルでメモ帳の[名前を付けて保存]メニューを使用する場合は、エンコードコンボボックスを確認してください。推測されたメモ帳のどのエンコーディングがファイルで使用されているかがわかります。

また、ANSIファイルの場合、detectEncodingFromByteOrderMarksパラメーターはおそらくあまり役​​に立ちません。

123
Jerome Laban

私は同じ問題を抱えていて、私の解決策は簡単でした:代わりに

Encoding.ASCII

つかいます

Encoding.GetEncoding("iso-8859-1")

答えが見つかりました こちら

編集:その他のソリューション。これはおそらくより正確なものです:

Encoding.GetEncoding(1252);

また、場合によっては、OSのデフォルトエンコーディングがファイルエンコーディングと一致していれば、これも機能します。

Encoding.Default;
23
serop

Encoding.Unicodeを使用しても、JPEGデコーダーがGIFファイルを理解できないのと同じ方法でANSIファイルを正確にデコードすることはできません。

ANSIファイルが本当にwasだった場合、_Encoding.Default_が機能しなかったことに驚いています-正確にwhichメモ帳が使用していたコードページ、 Encoding.GetEncoding(int) を使用できます。

一般的に、可能な場合はUTF-8を使用することをお勧めします。

9
Jon Skeet

Encoding.UTF8などの別のエンコーディングを試してください。 StreamReaderにエンコード自体を検出させることもできます。

    StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)

編集:更新を見ました。 StreamReaderに推測させてみてください。

7

File.OpenText()は、常に暗黙的にUTF-8 StreamReaderを使用します。代わりに独自のStreamReaderインスタンスを作成し、目的のエンコードを指定します。好む

using (StreamReader reader =  new StreamReader(@"C:\test.txt", Encoding.Default)
 {
 // ...
 }
2
Anonymous

ポルトガル語の文字を読み取るという問題を解決し、notepad ++のソースファイルを変更しました。

enter image description here

C#

    var url = System.Web.HttpContext.Current.Server.MapPath(@"~/Content/data.json");
    string s = string.Empty;
    using (System.IO.StreamReader sr = new System.IO.StreamReader(url, System.Text.Encoding.UTF8,true))
    {
          s = sr.ReadToEnd();
    }
0
Luís Ponciano

フランス語とドイツ語を含むエクスポートされたファイルも読んでいます。 Encoding.GetEncoding( "iso-8859-1")を使用しましたが、これは問題なく機能しました。

0
A. Lartey

アラビア語の場合、Encoding.GetEncoding(1256)を使用しました。うまく機能しています。

0
Muhamad Suliman

スウェーデン語ÅÄÖの場合、上記の作業の唯一の解決策は次のとおりでした。

Encoding.GetEncoding("iso-8859-1")

これが誰かの時間を節約することを願っています。

0
jagge123