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点)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)