Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件正在以UTF16格式保存。可能是什么问题?_C# - Fatal编程技术网

C# 文件正在以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()) {

我正在尝试将xml字符串保存为文件,文件将以UTF16格式保存。可能是什么问题

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
    ,因为
    MemoryStream
    没有固有的utf-16编码

文件的编码与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”
,但这并不意味着该文件采用该格式。