Кодировка UTF-8 в верхнем регистре при создании XML с ядром do tnet - PullRequest
0 голосов
/ 10 февраля 2020

Это решение { ссылка } для. Net Framework больше не работает в Do tnet Core. Протестировано с Dotent Core 3.1.101 и. Net Framework 4.7.1

Есть ли более элегантное решение, чем этот обходной путь? { ссылка }

В XmlEncodedRawTextWriter в строке 242 https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.Xml/src/System/Xml/Core/XmlEncodedRawTextWriter.cs#L242 используется другой экземпляр, чем я установил в XmlWriterSettings. Я думаю, что проблема в строке 175.

Есть ли другой способ для Do tnet Core написать XML объявление UTF-8 в верхнем регистре?

Это требование для Apple Plist файлы.

var doc = new XDocument(
    new XDocumentType("plist", "-//Apple//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd", null),
    new XElement("plist"))
{
    Declaration = new XDeclaration("1.0", "UTF-8", string.Empty)
};


var settings = new XmlWriterSettings
{
    //Encoding = new UTF8Encoding()
    Encoding = new UpperCaseUTF8Encoding()
};

using (var xmlWriter = XmlWriter.Create("demo.xml", settings))
{
    Console.WriteLine($"{xmlWriter.Settings.Encoding.WebName}, {settings.Encoding.WebName}");
    doc.Save(xmlWriter);
}
public class UpperCaseUTF8Encoding : UTF8Encoding
{
    public UpperCaseUTF8Encoding() : this(false)
    {
    }

    public UpperCaseUTF8Encoding(bool encoderShouldEmitUTF8Identifier) : this(encoderShouldEmitUTF8Identifier, false)
    {
    }

    public UpperCaseUTF8Encoding(bool encoderShouldEmitUTF8Identifier, bool throwOnInvalidBytes) : base(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes)
    {
    }

    public override string WebName => base.WebName.ToUpper(CultureInfo.InvariantCulture);
}
...