tl; dr: использовать XDocument.Save()
и его перегрузки
Судя по обсуждению в комментариях к вопросу, похоже, что это поведение реализации .NET в Unity 2017.4.33f1. :
XDocument.ToString()
закодирует документ в UTF-16 и выведет этот XML в виде строки и изменит объявление кодировки в документе на utf-16, независимо откодировка указанная в объектном / исходном файле . .NET-строки всегда имеют кодировку UTF-16 , так что это вероятный источник такого поведения. .NET выводит действительный XML, но не XML, который точно отражает, что был вызван объект XDocument ToString()
. Это означает, что код, подобный следующему:
XDocument doc = XDocument.Load(path);
System.Encoding enc = System.Encoding.GetEncoding(doc.Declaration.Encoding);
System.IO.File.WriteAllText(path, doc.ToString(), enc);
будет записывать недопустимый XML, если документ изначально не был закодирован в UTF-16.
XDocument.Save(string path)
учитывает кодировку, указанную вXDocument.Declaration
и сохранит файл с этой кодировкой.