Problema C # com a leitura de XML com caracteres de diferentes codificações nele

Eu enfrentei um problema com a leitura do XML. A solução foi encontrada, mas ainda há algumas questões. O arquivo XML incorreto está codificado em UTF-8 e possui marca apropriada em seu cabeçalho. Mas também inclui um caractere codificado em UTF-16 - 'é'. Este código foi usado para ler o arquivo XML para validar seu conteúdo:

var xDoc = XDocument.Load(taxFile);

Ele gera exceção para o arquivo XML incorreto especificado: "Caractere inválido na codificação fornecida. Linha 59, posição 104." A correção rápida é a seguinte:

XDocument xDoc = null;
using (var oReader = new StreamReader(taxFile, Encoding.UTF8))
{
    xDoc = XDocument.Load(oReader);
}

Este código não gera exceção para o arquivo incorreto. Mas o caractere 'é' é carregado como . Minha primeira pergunta é "por que isso funciona?".

Outro ponto é usar XmlReader não gera exceção até que o nó com 'é' seja carregado.

XmlReader xmlTax = XmlReader.Create(filePath);

E novamente o treino com o StreamReader ajuda. A mesma pergunta. Parece que a solução de correção não é boa o suficiente, porque um dia :) XML codificado em outro formato pode aparecer e pode ser proceder de maneira errada. Mas eu tentei processar o arquivo XML formatado em UTF-16 e funcionou bem (configurado para UTF-8).

A questão final é se há alguma opção a ser fornecida para XDocument / XmlReader para ignorar a codificação de caracteres ou smth assim.

Ansioso por suas respostas. desde já, obrigado

questionAnswers(1)

yourAnswerToTheQuestion