以下のコードを使用して、外来文字を含むテキストファイルを読み取ります。ファイルはANSIでエンコードされており、メモ帳では問題なく表示されます。以下のコードは機能しません。ファイル値が読み取られてデータグリッドに表示されると、文字が四角として表示されますが、別の場所に別の問題がありますか?
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))
ありがとう
更新1:System.Text.Encoding
の下にあるすべてのエンコーディングを試しました。すべてがファイルを正しく表示できません。
更新2:ファイルのエンコードをユニコードに変更し(ファイルを保存し直し)、System.Text.Encoding.Unicode
を使用しましたが、正常に機能しました。では、なぜメモ帳はそれを正しく読んだのですか?そして、なぜSystem.Text.Encoding.Unicode
はANSIファイルを読まなかったのですか?
はい、ファイルの実際のエンコード、おそらくユニコードで可能です。 Unicodeエンコードの最も一般的な形式であるUTF-8を試してください。それ以外の場合、ファイルASCIIの場合、標準ASCIIエンコードが機能するはずです。
また、現在のシステムのANSIコードページを使用するデフォルトエンコーディングを試すこともできます。
StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)
元のファイルでメモ帳の[名前を付けて保存]メニューを使用する場合は、エンコードコンボボックスを確認してください。推測されたメモ帳のどのエンコーディングがファイルで使用されているかがわかります。
また、ANSIファイルの場合、detectEncodingFromByteOrderMarksパラメーターはおそらくあまり役に立ちません。
私は同じ問題を抱えていて、私の解決策は簡単でした:代わりに
Encoding.ASCII
つかいます
Encoding.GetEncoding("iso-8859-1")
答えが見つかりました こちら 。
編集:その他のソリューション。これはおそらくより正確なものです:
Encoding.GetEncoding(1252);
また、場合によっては、OSのデフォルトエンコーディングがファイルエンコーディングと一致していれば、これも機能します。
Encoding.Default;
Encoding.Unicodeを使用しても、JPEGデコーダーがGIFファイルを理解できないのと同じ方法でANSIファイルを正確にデコードすることはできません。
ANSIファイルが本当にwasだった場合、_Encoding.Default
_が機能しなかったことに驚いています-正確にwhichメモ帳が使用していたコードページ、 Encoding.GetEncoding(int)
を使用できます。
一般的に、可能な場合はUTF-8を使用することをお勧めします。
Encoding.UTF8などの別のエンコーディングを試してください。 StreamReaderにエンコード自体を検出させることもできます。
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)
編集:更新を見ました。 StreamReaderに推測させてみてください。
File.OpenText()は、常に暗黙的にUTF-8 StreamReaderを使用します。代わりに独自のStreamReaderインスタンスを作成し、目的のエンコードを指定します。好む
using (StreamReader reader = new StreamReader(@"C:\test.txt", Encoding.Default)
{
// ...
}
ポルトガル語の文字を読み取るという問題を解決し、notepad ++のソースファイルを変更しました。
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();
}
フランス語とドイツ語を含むエクスポートされたファイルも読んでいます。 Encoding.GetEncoding( "iso-8859-1")を使用しましたが、これは問題なく機能しました。
アラビア語の場合、Encoding.GetEncoding(1256)
を使用しました。うまく機能しています。
スウェーデン語ÅÄÖの場合、上記の作業の唯一の解決策は次のとおりでした。
Encoding.GetEncoding("iso-8859-1")
これが誰かの時間を節約することを願っています。