gpt4 book ai didi

c# - UTF8 文件开头字符正在破坏序列化器和读取器

转载 作者:太空狗 更新时间:2023-10-29 22:21:00 29 4
gpt4 key购买 nike

好的,我正在尝试使用 UTF8 文本文件。我一直在与作者为 UTF8 插入的 BOM 字符作斗争,这几乎破坏了我读取文件所需的任何东西,包括序列化程序和其他文本阅读器。

我得到前导六个字节的数据:

0xEF
0xBB
0xBF
0xEF
0xBB
0xBF

(现在我正在查看它,我意识到那里有两个字符。那是 UTF8 BOM 标记吗?我是否对其进行了双重编码)?

请注意,序列化器编码为 UTF8,然后内存流获取 UTF8 字符串,然后我使用 UTF8 将字符串写入文件……似乎有很多冗余。想法?

//I'm storing this xml result to a database field. (this one includes the BOF chars)
using (MemoryStream ms = new MemoryStream())
{
Utility.SerializeXml(ms, root);
xml = Encoding.UTF8.GetString(ms.ToArray());

}


//later on, I would take that xml and then write it out to a file like this:
File.WriteAllText(path, xml, Encoding.UTF8);



public static void SerializeXml(Stream output, object data)
{
XmlSerializer xs = new XmlSerializer(data.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "\t";
settings.Encoding = Encoding.UTF8;
XmlWriter writer = XmlTextWriter.Create(output, settings);
xs.Serialize(writer, data);
writer.Flush();
writer.Close();
}

最佳答案

是的,这是两个 BOM。由于以下极其不幸的事实,您两次编码为 UTF-8,并且每次都添加一个伪 BOM:

Encoding.UTF8

的意思是“UTF-8 和一个毫无意义的 U+FEFF 粘在前面来搞砸你的应用程序”。尝试使用

new UTF8Encoding(false)

应该give you a less sucky version .

关于c# - UTF8 文件开头字符正在破坏序列化器和读取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1773654/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com