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