2015-08-10 2 views
1

Я искал много мест для ответа, но не смог его найти.C#, записывающее слово «ISO-8859-1» в верхнем регистре

Я использую XmlSerializer для генерации XML, и мне это нужно в кодировке ISO-8859-1. Мне удалось сделать это таким образом:

var encoding = Encoding.GetEncoding("ISO-8859-1"); 
using (StreamWriter writer = new StreamWriter(outfile, appendMode, encoding)) 
{ 
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
    ns.Add("", ""); 
    serializer.Serialize(writer, DTE, ns); 
    writer.Close(); 
} 

XML-это хорошо, но система, в которой мне нужно отправить XML в чувствителен к регистру в кодирующего слова, поэтому он просто принимает мой файл, он это говорит, кодирование = «ISO-8859-1» и не говорит «iso-8859-1».

Что я могу сделать? Заранее спасибо.

+2

Помимо всего прочего, вы уведомили другой конец, что они своего рода сломана? Из спецификации XML: «XML-процессоры должны соответствовать именам символов символов без учета регистра» –

+0

Возможно, вам придется фильтровать выходные данные сериализатора – ikegami

+1

Похоже, что в сериализаторе XML используется «Encoding.WebName». Вы можете написать реализацию «Encoding», которая делегирует все методы реальному, но поставляет свою собственную «WebName» ... –

ответ

2

Почему вы не просто получить содержимое XML в строку, а затем использовать string.Replace заменить ISO-8859-1 в ISO-8859-1

0

Просто для справки (и для моего будущего я) вот решение, как описано в Jon Skeet's comment:

internal class Iso88591Encoding : Encoding 
{ 
    private readonly Encoding _encoding; 

    public override string WebName => _encoding.WebName.ToUpper(); 

    public Iso88591Encoding() 
    { 
     _encoding = GetEncoding("ISO-8859-1"); 
    } 

    public override int GetByteCount(char[] chars, int index, int count) 
    { 
     return _encoding.GetByteCount(chars, index, count); 
    } 

    public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) 
    { 
     return _encoding.GetBytes(chars, charIndex, charCount, bytes, byteIndex); 
    } 

    public override int GetCharCount(byte[] bytes, int index, int count) 
    { 
     return _encoding.GetCharCount(bytes, index, count); 
    } 

    public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) 
    { 
     return _encoding.GetChars(bytes, byteIndex, byteCount, chars, charIndex); 
    } 

    public override int GetMaxByteCount(int charCount) 
    { 
     return _encoding.GetMaxByteCount(charCount); 
    } 

    public override int GetMaxCharCount(int byteCount) 
    { 
     return _encoding.GetMaxCharCount(byteCount); 
    } 
} 
Смежные вопросы