web-dev-qa-db-fra.com

Chargement de XML avec encodage UTF 16 à l'aide de XDocument

J'essaie de lire le document xml en utilisant la méthode XDocument. mais je reçois une erreur lorsque xml a

<?xml version="1.0" encoding="utf-16"?>

Lorsque j'ai supprimé l'encodage manuellement, cela fonctionne parfaitement.

J'obtiens une erreur " Il n'y a pas de marque d'ordre d'octets Unicode. Impossible de passer en Unicode. "

j'ai essayé de chercher et j'ai atterri ici ->

Pourquoi C # XmlDocument.LoadXml (chaîne) échoue lorsqu'un en-tête XML est inclus?

Mais ne pouvait pas résoudre mon problème.

Mon code:

XDocument xdoc = XDocument.Load(path);

Aucune suggestion ??

merci.

39
Sangram Nandkhile

Il semble que le fichier que vous essayez de lire ne soit pas codé en Unicode. Vous pouvez répliquer le comportement en essayant d'ouvrir un fichier encodé en ANSI avec l'encodage dans le fichier XML spécifié comme utf-16.

Si vous ne pouvez pas vous assurer que le fichier est codé correctement, vous pouvez lire le fichier dans un flux (en laissant le StreamReader détecter l'encodage), puis créer le XDocument:

using (StreamReader sr = new StreamReader(path, true))
{
    XDocument xdoc = XDocument.Load(sr);
}
59
Randy Levy

J'ai essayé et j'ai trouvé une autre façon de le faire !!

XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(path));
9
Sangram Nandkhile

Ce code:

System.IO.File.ReadAllLines(path)

renvoie un tableau de chaînes. Le bon code est:

System.IO.File.ReadAllText(path)
6
hamidreza samsami