【问题标题】:Unicode Encoding - handling Byte Order MarkUnicode 编码 - 处理字节顺序标记
【发布时间】:2014-07-08 12:09:45
【问题描述】:

我需要将一些对象序列化为 blob 以传递给 Web 服务调用。所有非常基本的东西。

问题的关键在于完成这项工作的代码的 sn-p 非常不灵活,因为在使用 StringWriter 时,输出的编码始终是 UTF-16

        StringWriter stringWriter = new StringWriter();
        serialiser.Serialize(stringWriter, Container.Calls);
        string data = stringWriter.ToString();

这可以处理大多数情况,但我想让它尽可能通用并处理其他编码,所以我将上面的内容更改为这个(我的想法是我可以在以后重构并传入编码):

        XmlTextWriter xmlTextWriter = new XmlTextWriter(stream,Encoding.Unicode);
        serialiser.Serialize(xmlTextWriter, Container.Calls);
        byte[] bytes = stream.GetBuffer();
        string data = System.Text.Encoding.Unicode.GetString(bytes);

System.Text.Encoding.Unicode.GetString 不再返回有效的 xml,因为在流的开头有一个字节顺序标记。我可以调用 stream.Read 并指定 BOM 的偏移量,但是,取决于编码,我并不总是期望它存在,所以这可能会变得混乱。我真正需要的是它根本不存在。

【问题讨论】:

标签: .net xml serialization unicode encoding


【解决方案1】:

来自另一个帖子 (StreamWriter and UTF-8 Byte Order Marks):

“问题是由于您在 Encoding 类上使用了静态 UTF8 属性。

当对 UTF8 属性返回的 Encoding 类的实例调用 GetPreamble 方法时,它会返回字节顺序标记(三个字符的字节数组),并在任何其他内容写入流”

所以,在这种情况下,我改变了

XmlTextWriter xmlTextWriter = new XmlTextWriter(stream,Encoding.Unicode);

XmlTextWriter xmlTextWriter = new XmlTextWriter(stream,new System.Text.UnicodeEncoding  (false,false));

它工作正常。

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 2017-01-28
    • 2014-12-24
    • 2015-07-07
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多