web-dev-qa-db-ja.com

ANSIエンコードおよび英語以外の文字を含むテキストファイルを読み取る方法

英語以外の文字を含むファイルがあり、英語以外のコードページを使用してANSIエンコードで保存されました。このファイルをC#で読み取り、ファイルの内容を正しく表示するにはどうすればよいですか?

動かない

StreamReader sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.ASCII);
var ags = sr.ReadToEnd();
sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.UTF8);
ags = sr.ReadToEnd();
sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.Unicode);
ags = sr.ReadToEnd();

動作していますが、コードページが何であるかを事前に知る必要がありますが、これは不可能です。

sr=new StreamReader(@"C:\APPLICATIONS.xml",Encoding.GetEncoding(1252));
ags = sr.ReadToEnd();
39
MichaelT
 var text = File.ReadAllText(file, Encoding.GetEncoding(codePage));

コードページのリスト: http://msdn.Microsoft.com/en-us/library/windows/desktop/dd317756(v = vs.85).aspx

62
L.B

テキストファイルで高ANSIエンコーディングを使用すると、疑問符のひし形文字が表示されます。つまり、127〜255の文字が使用されます。これらの文字には8番目(つまり、最上位)のビットが設定されます。 ASP.NETがテキストファイルを読み取るとき、UTF-8エンコーディングを想定しており、その最上位ビットには特別な意味があります。

コードページが1252であることを伝えることで、ASP.NETにテキストファイルを高ANSIエンコーディングとして解釈させる必要があります。

String textFilePhysicalPath = System.Web.HttpContext.Current.Server.MapPath("~/textfiles/MyInputFile.txt");
String contents = File.ReadAllText(textFilePhysicalPath, System.Text.Encoding.GetEncoding(1252));
lblContents.Text = contents.Replace("\n", "<br />");  // change linebreaks to HTML
5
Snizzle

正しく覚えていれば、XMLエンコーディングに関係なく、XmlDocument.Load(string)メソッドは常にUTF-8を想定しています。正しいエンコーディングでStreamReaderを作成し、それをパラメーターとして使用する必要があります。

xmlDoc.Load(new StreamReader(
                     File.Open("file.xml"), 
                     Encoding.GetEncoding("iso-8859-15"))); 

MicrosoftからKB308061を見つけました。興味深い一節があります:XMLドキュメントのXML宣言セクションでエンコード宣言を指定します。たとえば、次の宣言は、ドキュメントがUTF-16 Unicodeエンコード形式であることを示しています。

<?xml version="1.0" encoding="UTF-16"?>

この宣言は、XMLドキュメントのエンコード形式のみを指定し、データの実際のエンコード形式を変更または制御しないことに注意してください。

リンクソース:

XmlDocument.Load()メソッドは€(ユーロ)のデコードに失敗します

2
KF2