45

英語以外の文字を含むファイルがあり、英語以外のコードページを使用して 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();
4

5 に答える 5

68
 var text = File.ReadAllText(file, Encoding.GetEncoding(codePage));

コードページのリスト: https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers?redirectedfrom=MSDN

于 2012-08-26T13:03:53.440 に答える
12

テキストファイルが高 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
于 2016-05-10T17:17:44.103 に答える
2

私の記憶が正しければ、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() メソッドが € (ユーロ) のデコードに失敗する

于 2012-08-26T13:01:52.160 に答える