C# 文件正在以UTF16格式保存。可能是什么问题?
我正在尝试将xml字符串保存为文件,文件将以UTF16格式保存。可能是什么问题C# 文件正在以UTF16格式保存。可能是什么问题?,c#,C#,我正在尝试将xml字符串保存为文件,文件将以UTF16格式保存。可能是什么问题 private void SaveFile(string xmlData, string fileName) { File.WriteAllText(fileName, xmlData, Encoding.UTF8); } 尽管我提到了UTF8编码,但文件仍以UTF16格式保存。我猜您已经做了如下操作: string xml; using(var sw = new StringWriter()) {
private void SaveFile(string xmlData, string fileName)
{
File.WriteAllText(fileName, xmlData, Encoding.UTF8);
}
尽管我提到了UTF8编码,但文件仍以UTF16格式保存。我猜您已经做了如下操作:
string xml;
using(var sw = new StringWriter()) {
xmlSerializer.Serialize(sw, obj);
xml = sw.ToString();
}
在这种情况下,是的,xml将在内部声明utf-16,因为它已正确确定它正在写入本质上是utf-16的内容。在编写器中可能有一些方法可以解决这个问题(例如,XmlWriterSettings.Encoding
),但更好的方法是:
- 直接写入/序列化文件,例如通过
写入文件StreamWriter
- 写入/序列化到
而不是MemoryStream
,因为StringWriter
没有固有的utf-16编码MemoryStream
文件的编码与xml中声明的编码并不完全相同;如果xml作为字符串表示utf-16,那么这不会因为您将字符串写为utf-8而神奇地改变您如何序列化xmlData字符串?您确定您谈论的是文件的文件格式,而不是xml中的头吗?您是如何验证文件格式的?
file.writealText()
已知该方法工作正常。您可以指定Encoding.UTF8
,这将得到遵守。对于你所描述的,唯一合理的解释是:1。在创建xmlData
时,您对文本进行了双重编码。2.您报告的UTF-16是写在XML头中的UTF-16。底线是在问题中看不到的代码中可以找到错误。要添加到Cadburry的注释中,您试图保存的XML字符串可能包含encoding=“utf-16”
,但这并不意味着该文件采用该格式。