XMLDocument et caractère accentués

XMLDocument et caractère accentués - C#/.NET managed - Programmation

Marsh Posté le 10-05-2004 à 15:02:54    

Bonjour,
 
J'aimerais ouvrir un fichier XML contenant des caractères accentués a l'aide d'un XMLDocument.
 

Code :
  1. XmlDocument doc = new XmlDocument() ;
  2. doc.Load(nomFicXML) ;


 
Il me lève une exception lors du Load() dès que je mets un caractère accentué dans le fichier XML que je veux charger.
Si j'enlève tous les caractères accentués du fichier XML, le Load() se passe correctement
Si je remplace mon é par un é j'ai toujours une exception.
 
L'un de vous aurait une petite idée ?
Merci bcp !

Reply

Marsh Posté le 10-05-2004 à 15:02:54   

Reply

Marsh Posté le 10-05-2004 à 15:23:10    

c'est quoi que tu choppes comme exception ?

Reply

Marsh Posté le 10-05-2004 à 15:26:16    

http://babel.alis.com/web_ml/xml/R [...] l#charsets
Tes caractères doivent être encodés en UNICODE.

Reply

Marsh Posté le 10-05-2004 à 15:47:11    

ok, merci bcp...
 
Pour info, le é se code soit en & # 2 3 3 ; soit en & # x 0 0 E 9 ;
 
A+
 
edit : en enlevant les espaces...


Message édité par Eugt le 10-05-2004 à 15:48:15
Reply

Marsh Posté le 12-05-2004 à 14:31:16    

HelloWorld a écrit :


Tes caractères doivent être encodés en UNICODE.


 
Pire que ça,
 
Si tu as des accents l'encoding du xml doit être ISO-8859-1
Si t'as pas d'accent, tu peux mettre UTF-8.
 
En fait tu peux normalement avoir des accent en UTF-8 car ce codage est universel. Seulement, il faut que l'éditeur (ou le programme qui génère le xml) écrive effectivement en UTF-8 (et c'est pas toujours le cas).
 
Enfin, ISO-8859-1 ou UTF-8 NE SONT PAS de l'Unicode


Message édité par pascal34 le 12-05-2004 à 14:32:00
Reply

Marsh Posté le 12-05-2004 à 14:47:37    

HelloWorld a écrit :

http://babel.alis.com/web_ml/xml/R [...] l#charsets
Tes caractères doivent être encodés en UNICODE.

Non! Faudrait arreter de raconter n' importe quoi!
 
On peut dans du XML utiliser des caracteres dans n' importe quel codage a condition que
1) On indique le codage dans la declaration XML
2) Le parseur XML reconnaisse ce codage
3) Il n' y ait pas dans ce codage (ou plutot dans le document encode dans ce codage) de caracteres qui ne soit pas present dans la norme Unicode  
 
Et si tu veux utiliser des é a la HTML, il suffit d' utiliser des declarations d'entites caracteres.
A+,


Message édité par gilou le 12-05-2004 à 14:48:43
Reply

Marsh Posté le 12-05-2004 à 14:59:18    

:jap:
Je pensais que c'était la règle car le parser que j'utilisais encodait automatiquement mes accents, etc....

Reply

Marsh Posté le 12-05-2004 à 15:32:15    

En interne au parseur, c'est de l'unicode (la spec XML est ainsi faite que si on veut une autre representation que de l'unicode en interne faut etre plus que super-maso) Mais en externe (le fichier/stream... lu/ecrit), ca essaye d'etre le plus permissif possible.
L'encodage doit etre indiqué dans la declaration XML, par exemple: <?xml encoding='UTF-8'?>, ou <?xml encoding='EUC-JP'?>, ...
Si il n'y a pas d'encodage declare, alors le document doit etre encode en unicode, et le parser se debrouille avec le debut du fichier (le <?xml ) pour determiner si on est en UTF-8, UTF-16LE ou UTF-16BE.
A+,

Reply

Marsh Posté le 12-05-2004 à 15:39:42    

pascal34 a écrit :


Enfin, ISO-8859-1 ou UTF-8 NE SONT PAS de l'Unicode


 
:heink: en quoi UTF-8 n'est pas de l'unicode ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 12-05-2004 à 16:18:38    

Oui, va falloir aussi qu'on m'explique :D
Parce que UTF-8 est un des encodages possibles de Unicode, au meme titre que UTF-16 ou UTF-32 ou d'autres.
Faudrait voir a pas confonfre codepoint et valeur d'encodage pour une representation particuliere.
 
Bon si on veut vraiment aller dans le trefond du detail, aucun encodage (pas meme UTF-16 ou UTF-32) n'est Unicode), mais certains encodages (dont UTF-8, 16, 32) peuvent encoder Unicode.
A+,


Message édité par gilou le 12-05-2004 à 16:19:16
Reply

Marsh Posté le 12-05-2004 à 16:18:38   

Reply

Marsh Posté le 12-05-2004 à 16:25:48    

Sauf erreur de ma part,
 
Unicode = codage des caractères sur 16 bits
UTF-8 = codage multi-byte sur 7 bit de donné + 1 bit flag. Dans le premier octet, si le bit de poids fort est à 0 on a un caractère sur 7 bits sinon s'il est à 1 ça signifie qu'il y a un autre octet pour coder le caractère :

  • Si cet octet suivant à un bit de poids fort à 0, c'est fini et on a un caractère codé sur 14 bits mais dont les bits n'ont peut-être pas la même signification que ceux d'Unicode ! (là je ne sais pas)
  • Si cet octet suivant à un bit de poids fort à 1, on recommence jusqu'à tomber sur un octet avec un bit de poids fort à 0.


Et ainsi, les caractères comme é, è, ê, etc. sont codés sur 3 octets (en fait 21 bits) en UTF-8
 
CQFD (si je me trompe pas)  :jap:


Message édité par pascal34 le 12-05-2004 à 16:28:58
Reply

Marsh Posté le 12-05-2004 à 16:55:34    

Ben tu te trompes:
> Unicode = codage des caractères sur 16 bits
Non. C'est pas sur 16 bits, c'est plus compliqué (par exemple avec l'utilsation des surrogates), et c'est pas un codage.
C'est un ensemble de caractere plus des tables de proprietes pour chaque caractere du jeu, et un ensemble d'algorithmes de tri. De plus pour certains caracteres composites, c'est une suite de code points (et plusieurs formes normalisées possibles)
 
Pour le codage lui meme, je te cite la norme:

Citation :

Unicode provides for three encoding forms: a 32-bit form (UTF-32), a 16-bit form (UTF-16), and an 8-bit form (UTF-8). The 8-bit, byte-oriented form, UTF-8, has been designed for ease of use with existing ASCII-based systems.


(en fait, avec les evolutions de la norme Unicode, on en est maintenant a 7 encodages specifies dans la norme Unicode: UTF-8 UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE)
Mais ce serait une erreur de considerer les code points comme etant le codage lui meme.
 
A+,


Message édité par gilou le 12-05-2004 à 16:59:57
Reply

Marsh Posté le 12-05-2004 à 16:58:03    

Ce que j'ai dit n'étant pas tout à fait juste, ce n'est pas tout à fait faux :
 
http://www.sniffer.net/bookshelf_d [...] ppb_01.htm

Reply

Marsh Posté le 12-05-2004 à 17:07:35    

un manuel java n'est pas la meilleure reference pour Unicode. Je preferre celle ci: http://www.unicode.org/versions/Unicode4.0.1/
A+,

Reply

Marsh Posté le 12-05-2004 à 17:10:43    

gilou a écrit :

un manuel java n'est pas la meilleure reference pour Unicode. Je preferre celle ci: http://www.unicode.org/versions/Unicode4.0.1/
A+,


 
C'est vrai que c'est plus complet

Reply

Marsh Posté le 12-05-2004 à 18:04:14    

pascal34 a écrit :


Et ainsi, les caractères comme é, è, ê, etc. sont codés sur 3 octets (en fait 21 bits) en UTF-8
 


 
:non: ce genre de trucs c'est sur 2 octets
ceux qui sonr sur 3 octets ce sont certains caractères chinois ou asiatiques (ou autres alphabets bien spécifiques)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-05-2004 à 09:16:59    

De toute façon j'ai tort  [:pascal34]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed