J'ai des fichiers xml qui représentent des courriels exportés à partir d'un client de messagerie. Malheureusement, lorsque j'essaie de lire ces fichiers, les caractères spéciaux ne sont pas affichés car les caractères d'origine étaient affichés.mauvais codage - le remplacement numérique xml est mal interprété
J'essaye de faire lire ceci correctement dans un client que j'écris. Net.
Exemple: Je reçois le remplacement numérique suivant:
á
Cela est interprété comme:
á
Bien que la valeur d'origine/attendu est:
ú
A peut-être meilleur exemple:
Tað eftir er av árinum ber tó til at logga á
interprété comme cela devient:
Tað eftir er av árinum ber tó til at logga á
La valeur d'origine/attendu est:
Tað eftir er av árinum ber tó til at logga á
Je peux constater que le problème semble être que .Net interprète à ° comme deux caractères séparés, alors qu'en réalité ils représentent un personnage.
je crois que je devrais être en mesure d'utiliser ce site pour traduire la valeur interprétée dans la valeur attendue (mais pas exactement les mêmes caractères je reçois): http://www.i18nqa.com/debug/utf8-debug.html
Mais je suis incapable de l'obtenir affiché correctement. Net.
x.Load(
New StreamReader(
File.Open("content.xml", FileMode.Open),
Encoding.GetEncoding(1252), True
)
)
Ceci ne fait pas de différence. Si je tente Encoding.Unicode alors il ne parvient pas à lire le fichier (erreur: données au niveau racine est invalide)
Pourquoi vous attendez-vous à ce que deux remplacements numériques soient analysés comme un seul caractère? Les remplacements numériques sont pour * caractère * entités, pas * octets *. TL; DR: Je crois que votre XML est incorrect, pas la manipulation de .NET. –
Peut-être que je pourrais prendre manuellement les deux valeurs décimales 195 et 161 et convertir en hexadécimal, cela deviendrait c3 et ba qui est la valeur hexadécimale UTF-8 pour le caractère ú. Mais cette fonctionnalité de conversion n'est-elle pas intégrée dans .net? – Andras
Je pense que vous avez manqué mon point.Le traitement XML dans .NET fait exactement ce qu'il devrait faire. Si vous voulez représenter U + 00FA en XML, il doit être représenté par "ú" ou "ú". Le nombre dans l'entité est un point de code, comme spécifié ici: https://www.w3.org/TR/xml/#sec-references - ce n'est * pas * destiné à être "un octet qui fait partie d'une représentation codée de un caractère". –