锘??xml 乱码的解决

来源:互联网 发布:vue.js视频百度云 编辑:程序博客网 时间:2024/05/21 06:44

读写一个XML文件,然后对文件内容进行加密(Base64),方便网络传输。

发现生成的XML文件,总是这样的文件头:??xml version="1.0" encoding="utf-8"?>

而不是原来的"<"xml version="1.0" encoding="utf-8"?>

 解决法方法是,将文件内容读取到一个XMLDocument 对象中,然后对内容更改/加密。

接下来,如果直接把XMLDocument.Save(OutputFileName),就会有乱码的出现。

建议使用XMLDocument.Save(Stream),比如MemoryStream,以内存而不是磁盘或网络连接作为支持存储区。

MemoryStream 封装以无符号字节数组形式存储的数据,该数组在创建 MemoryStream 对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。

流的当前位置是下一个读取或写入操作可能发生的位置。当前位置可以通过 Seek 方法检索或设置。在创建 MemoryStream 的新实例时,当前位置设置为零。

)。所以非常适合编码/解码操作,以Byte为操作,不会有乱码的问题。Memostream.Position=0

最后调用简单的CopyStream(MemoryStream, outputFileName),生成XML文件。

 

 private void CopyStream(Stream src, string filename)
        {
            //dest.Position = 0;
            StreamReader reader = new StreamReader(src);
            Stream dest = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None);
            StreamWriter writer = new StreamWriter(dest);

            writer.Write(reader.ReadToEnd());
            writer.Flush();

            writer.Close();
            writer.Dispose();
            dest.Close();
            dest.Dispose();
            reader.Close();
            reader.Dispose();
        }

private void CopyStream(Stream src, Stream dest)
        {
            //dest.Position = 0;
            StreamReader reader = new StreamReader(src);
            StreamWriter writer = new StreamWriter(dest);

            writer.Write(reader.ReadToEnd());
            writer.Flush();

            reader.Close();
            reader.Dispose();
        }