Пожалуйста, не используйте
ASCIIEncoding.UTF8
Это действительно просто
Encoding.UTF8
Он вообще не использует ASCIIEncoding
.Это просто выглядит в вашем исходном коде.
По сути, проблема в том, что ваш файл это UTF-8, это , а не ASCII.Вот почему он имеет метку порядка байтов UTF-8.Я настоятельно рекомендую вам использовать Encoding.UTF8
для чтения файла UTF-8, тем или иным способом.
Если вы читаете файл с File.ReadAllText
, я подозреваю, что он будетудалить спецификацию автоматически.Или вы можете просто обрезать его потом, прежде чем позвонить XElement.Parse
.Использование неправильной кодировки (ASCII или Encoding.Default) не правильный подход.Точно так же это , а не мусорный персонаж.Это очень полезный символ, дающий очень четкое указание на то, что на самом деле является файлом UTF-8 - просто вы не хотите его в данном конкретном контексте .«Мусор» создает впечатление, что это поврежденные данные, которые не должны присутствовать в файле, и это определенно не тот случай.
Другой подход - вообще не использовать его для преобразования в текст.Например:
XElement element;
using (XmlReader reader = XmlReader.Create(new MemoryStream(bytes))
{
element = XElement.Load(reader);
}
Таким образом, кодировка будет определяться автоматически.