0

ansiからUTF-8に変換したいxmlファイルを取得しています。元のxmlファイルにxml宣言がなかったため、最初はコードが機能していました。しかし最近、元のxmlファイルには次の宣言が含まれています。

  <?xml version="1.0" encoding="WINDOWS-1256"?>

私のコードでは、ansiからuft-8に変換し、別のヘッダーを追加しています。

<?xml version="1.0" encoding="utf-8"?>

したがって、utf-8に変換するために新しいファイルをコードに渡した後、新しい宣言は次のようになります。

<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="WINDOWS-1256"?>

これは無効だと思います。

以下は私のコードです:

Encoding utf8 = new UTF8Encoding(false);
Encoding ansi = Encoding.GetEncoding(1256);
System.Threading.Thread.Sleep(2000);

string xml = File.ReadAllText(FileName,ansi);
//   XDocument xmlDoc = XDocument.Parse(xml);
//  Console.WriteLine("1st");
File.WriteAllText(
      FileName,
      @"<?xml version=""1.0"" encoding=""utf-8""?>" +  xml.ToString(),
      utf8
);


if (File.Exists(destinationFile))
    File.Delete(destinationFile);

File.Copy(FileName, destinationFile,true);
Console.WriteLine("File Copied" + "  " + DateTime.Now.ToString("HH:mm:ss tt")); // for troubleshoooting only
Console.WriteLine("Press \'q\' to quit."); 
Console.Write(CrL);

これの出力は、2つの宣言を含む文字化けしたアラビア語のテキストとして出力されます。コードのどこが間違っていますか。

4

1 に答える 1

1

string.Concatを使用してXMLを適切に構築することは非常に困難であり、正しく実行するには仕様を深く理解する必要があります。残念ながら、仕様を読むと、特殊なAPIがXMLを操作するのにはるかに適していることがわかります。そのため、質問に対する実際の答えは不可能です。

代わりに、通常のXml APIの使用を検討してください。XmlDocumentまたは XDocument、どちらも問題なく機能します。選択したエンコーディングでファイルを保存するには、XmlWriterSettings.Encodingで説明されているように、好きなエンコーディングでXmlWriterを作成する必要があります

var doc = new XmlDocument();
doc.Load(FileName);

設定でXmlWriterを使用して、ドキュメントをファイルに保存します。

XmlWriterSettings settings = new XmlWriterSettings{Encoding=Encoding.UTF8};
using(var fileStream = File.OpenWrite(destinationFile))
{
  using(var writer = XmlWriter.Create(fileStream, settings))  
  {
    doc.Save(writer);
  }
}
于 2013-02-13T05:38:55.187 に答える