私の最初のいくつかの試みは、ストリーム、バイト配列、および多くのエンコーディングの問題でした。 .NETの文字列はすでにUTF-16なので、xml宣言だけを変更する必要があることが分かります。
答えは実際には非常に簡単です。文字列をXmlDocumentにロードし、宣言を変更してOuterXmlを取得する拡張メソッドを次に示します。
public static class XmlDocumentExtensions
{
public static string ToEncoding(this XmlDocument document, Encoding encoding)
{
if (document.FirstChild.NodeType == XmlNodeType.XmlDeclaration)
{
XmlDeclaration xmlDeclaration = (XmlDeclaration)document.FirstChild;
if (String.Compare(xmlDeclaration.Encoding, encoding.WebName, StringComparison.OrdinalIgnoreCase) != 0)
{
xmlDeclaration.Encoding = encoding.WebName;
return document.OuterXml;
}
}
return document.OuterXml;
}
}
あなたはそうのようにそれを使用することができます:
XmlDocument document = new XmlDocument();
document.LoadXml(xml);
xml = document.ToEncoding(Encoding.Unicode);