c# – 为什么我在字节数组的开头有一个额外的字符(点或子d点)?

c# – 为什么我在字节数组的开头有一个额外的字符(点或子d点)?,第1张

概述我有以下代码用于使用UTF-8编码将xml从DataSet转换为字节数组: private static byte[] fGetXmlBytes(DataTable lvDataTable){ XmlWriterSettings lvSettings = new XmlWriterSettings(); lvSettings.Encoding = Encoding.UTF8; lvS 我有以下代码用于使用UTF-8编码将xml从DataSet转换为字节数组:

private static byte[] fgetXmlBytes(Datatable lvDatatable){  XmlWriterSettings lvSettings = new XmlWriterSettings();  lvSettings.EnCoding = EnCoding.UTF8;  lvSettings.NewlineHandling = NewlineHandling.Replace;  lvSettings.NewlineChars = String.Empty;  using(MemoryStream lvMemoryStream = new MemoryStream())  using (XmlWriter lvWriter = XmlWriter.Create(lvMemoryStream,lvSettings))  {    lvDatatable.WriteXml(lvWriter,XmlWriteMode.IgnoreSchema);    //lines used during deBUGging    //byte[] lvXmlBytes = lvMemoryStream.GetBuffer();    //String lsXml = EnCoding.UTF8.GetString(lvXmlBytes,lvXmlBytes.Length);    return lvMemoryStream.GetBuffer();  }}

我想要一个字节数组,因为我随后将数据传递给在字节数组上工作的压缩和加密例程.问题是我在xml的开头有一个额外的字符.代替:

<?xml version="1.0" enCoding="utf-8"?><etc....

我明白了

.<?xml version="1.0" enCoding="utf-8"?><etc....

有谁知道为什么角色在那里?有没有办法防止添加角色?或者轻松剥离它?

科林

解决方法 您将不得不使用不发出前导码的EnCoding类. EnCoding.UTF8返回的对象将发出一个前导码,但是您可以创建自己的UTF8EnCoding,它不会像这样发出前导码:

lvSettings.EnCoding = new UTF8EnCoding(false);

UTF-8前导码是使用UTF-8编码的UNICODE byte order mark(U FEFF). UNICODE字节顺序标记的目的是指示流的16位代码单元的字节顺序(字节顺序).如果流中的初始字节是0xEF 0xFF,则流是大端;否则,如果初始字节是0xFF 0xEF,则流是小端.

使用UTF-8编码的U FEFF导致字节0xEF 0xBB 0xBF,有点讽刺的是,因为UTF-8编码为8位字节的序列,所以字节顺序不再重要.

总结

以上是内存溢出为你收集整理的c# – 为什么我在字节数组的开头有一个额外的字符(点或子d点)?全部内容,希望文章能够帮你解决c# – 为什么我在字节数组的开头有一个额外的字符(点或子d点)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1224701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存