#c#
#c#
Вопрос:
Я пытаюсь сохранить XML-строку как файл, файл сохраняется в формате UTF16. В чем может быть проблема?
private void SaveFile(string xmlData, string fileName)
{
File.WriteAllText(fileName, xmlData, Encoding.UTF8);
}
Несмотря на то, что я упомянул кодировку как UTF8, файл все равно сохраняется в формате UTF16.
Комментарии:
1. Как вы сериализуете строку xmlData?
2. вы уверены, что говорите о формате файла, а не о заголовке в XML?
3. Как вы проверили формат файла?
4.
File.WriteAllText()
Известно, что этот метод работает корректно. Вы указываетеEncoding.UTF8
, и это будет соблюдено. Единственными правдоподобными объяснениями того, что вы описываете, являются следующие: 1. Вы дважды закодировали текст при созданииxmlData
. 2. UTF-16, о котором вы сообщаете, соответствует тому, что указано в заголовке XML. Суть в том, что ошибка должна быть найдена в коде, который не может быть виден в вопросе.5. Добавим к комментарию Cadburry, что XML-строка, которую вы пытаетесь сохранить, может содержать
encoding="utf-16"
, но это не означает, что файл находится в этом формате.
Ответ №1:
Я предполагаю, что вы сделали что-то вроде:
string xml;
using(var sw = new StringWriter()) {
xmlSerializer.Serialize(sw, obj);
xml = sw.ToString();
}
в этом случае да, xml будет внутренне объявлять utf-16, потому что он правильно определил, что он записывает во что-то, что по своей сути является utf-16. Вероятно, есть способы обойти это в writer ( XmlWriterSettings.Encoding
, например), но лучшим подходом было бы либо:
- для записи / сериализации непосредственно в файл, например, через
StreamWriter
в файл - для записи / сериализации в
MemoryStream
, а не вStringWriter
, посколькуMemoryStream
не имеет встроенной кодировки utf-16
Кодировка файла не совсем совпадает с заявленной кодировкой в xml; если в xml в виде строки указано utf-16, это волшебным образом не изменится только потому, что вы записываете строку как utf-8