二进制流序列化,设置UTF8格式写入,但是没有效果,文件还是ANSI格式

1551有人能帮帮我吗?哪里有问题啊

            FileStream fs = new FileStream(@"E:/test/PlayerConfig.dat", FileMode.Create, FileAccess.Write);
            MemoryStream ms = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(ms, tmp.data);
            BinaryWriter bw = new BinaryWriter(fs, new UTF8Encoding());
            bw.Write(ms.GetBuffer());
            bw.Flush();
            bw.Close();
            fs.Close();

生成的文件不是UTF8格式

写的2进制数据,不需要管最后记事本打开的存储编码。最后反序列化也是2进制操作。
除非用StreamWriter之类的写入文本信息才会按照指定的编码生成文件。

示例参考


img

dat是个二进制文件
首先它不是文件夹,没有什么文件夹是UTF8格式的
它也不是文本文件
你强行用记事本打开之后另存为时显示它默认是ANSI,那只是记事本默认的保存方式,跟它原来是什么类型没有一毛钱关系
只有当你写文件写入的是字符串,格式是txt,类型才有意义
好比excel文件才分03或07,你搞个txt非说是03的,那能对吗

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632