翼度科技»论坛 编程开发 .net 查看内容

.Net 中实体类转换为XML字符串, 确保字符串头部是utf-8 不是utf-16

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
使用Utf8StringWriter或类似的方法来确保在序列化过程中使用正确的编码。然而,Utf8StringWriter不是.NET Core或.NET Standard库的一部分,因此你需要自己实现一个。
不过,有一种更简单的方法可以达到相同的效果,那就是使用StringWriter与Encoding.GetEncoding("utf-8")结合,但这实际上并不正确,因为StringWriter总是使用UTF-16。正确的方法是使用MemoryStream与XmlWriter,这样你就可以指定XmlWriter的编码设置。
以下是一个使用MemoryStream和XmlWriter的示例,该示例将确保生成的XML具有utf-8编码:
  1. public static string SerializeObjectToXml<T>(T toSerialize)
  2. {
  3.     XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
  4.     using (MemoryStream memoryStream = new MemoryStream())
  5.     {
  6.         // 使用UTF-8编码和无BOM的XmlWriterSettings
  7.         XmlWriterSettings settings = new XmlWriterSettings
  8.         {
  9.             Encoding = Encoding.UTF8,
  10.             Indent = true, // 可选的,如果你想要格式化的XML
  11.             OmitXmlDeclaration = false, // 可选的,如果你想要包含XML声明
  12.         };
  13.         using (XmlWriter xmlWriter = XmlWriter.Create(memoryStream, settings))
  14.         {
  15.             xmlSerializer.Serialize(xmlWriter, toSerialize);
  16.         }
  17.         // 将MemoryStream的内容转换为UTF-8字符串
  18.         return Encoding.UTF8.GetString(memoryStream.ToArray());
  19.     }
  20. }
复制代码
在这个例子中,XmlWriterSettings被配置为使用UTF-8编码,并且创建的XmlWriter实例被传递给XmlSerializer.Serialize方法。序列化完成后,MemoryStream的内容被转换为UTF-8编码的字符串。
请注意,如果你想要生成的XML不包含BOM(字节顺序标记),上面的代码已经满足了这个要求,因为.NET Core中的Encoding.UTF8默认不产生BOM。如果你确实需要BOM,你需要使用new UTF8Encoding(true)来创建编码实例,但这通常不是必要的,因为BOM主要在文本文件中有用,而在字符串中通常不需要。

来源:https://www.cnblogs.com/donethome/p/17981804
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具