英語以外の文字を含むファイルがあり、英語以外のコードページを使用して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();
var text = File.ReadAllText(file, Encoding.GetEncoding(codePage));
コードページのリスト: http://msdn.Microsoft.com/en-us/library/windows/desktop/dd317756(v = vs.85).aspx
テキストファイルで高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
正しく覚えていれば、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ドキュメントのエンコード形式のみを指定し、データの実際のエンコード形式を変更または制御しないことに注意してください。
リンクソース: