【问题标题】:C# writing the word "ISO-8859-1" in uppercaseC# 用大写字母写“ISO-8859-1”
【发布时间】:2015-08-10 17:40:49
【问题描述】:

我找了很多地方都找不到答案。

我正在使用 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 发送到的系统在编码字中是区分大小写的,所以它只接受我的文件,它说 encoding="ISO-8859-1" 而没有当它说“iso-8859-1”时。

我能做什么?提前谢谢你。

【问题讨论】:

  • 除此之外,你有没有通知对方他们有点坏了?来自 XML 规范:“XML 处理器应该以不区分大小写的方式匹配字符编码名称”
  • 您可能需要过滤序列化程序的输出
  • 看起来 XML 序列化程序正在使用 Encoding.WebName。您可以编写一个Encoding 实现,它将所有方法委托给真正的方法,但提供自己的WebName...
  • 您可以手动完成。看看 SO [1] 中的 How to Answer[1]:stackoverflow.com/questions/16706931/…
  • 好的,过了一会儿我在这里找到了答案stackoverflow.com/questions/398621/…

标签: c# encoding iso-8859-1


【解决方案1】:

为什么不直接获取字符串中的 XML 内容,然后使用 string.Replace 将 ISO-8859-1 替换为 iso-8859-1

【讨论】:

    【解决方案2】:

    仅供参考(以及我未来的自己)这是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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2013-01-19
      • 2010-09-13
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      相关资源
      最近更新 更多