Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2991 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JavaScript] Spécification de l'encodage d'un document XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JavaScript] Spécification de l'encodage d'un document XML

n°1653510
Ummon
Posté le 05-12-2007 à 22:05:43  profilanswer
 

Bonjour,
La question est simple : Comment définir l'encodage, en l'occurence utf-8, lors de la création d'un document XML ?
 
Le cadre :
J'envoie des données XML en utilisant la méthode AJAX (j'utilise la lib jQuery). Or, lors de la sérialisation du document XML, Firefox utilise l'encodage iso-8859-1 (a priori) et ne met d'ailleurs aucun prologue (<?xml [..] ?> ).
 
Voici un exemple :

Code :
  1. var doc = document.implementation.createDocument("", "action", null)
  2. var serializer = new XMLSerializer()
  3. alert(serializer.serializeToString(doc))


Ce code affiche "<action/>"
 
J'ai trouvé cette solution pour contourner le problème :

Code :
  1. var parser = new DOMParser();
  2. var doc = parser.parseFromString("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<action/>", "text/xml" )
  3. var serializer = new XMLSerializer()
  4. alert(this.serializeXML(doc))


Qui affiche
'<?xml version="1.0" encoding="utf-8" ?>
<action/>'
 
Je trouve cette solution abominable, est-ce que quelqu'un dans la salle aurait une solution plus élégante  ?
 
Je me suis référer à ce document ainsi qu'au livre "Javascript, la référence" de chez O'Reilly.
 
Ce problème est tiré d'un petit web chat que je suis en train de réaliser, cf cette page.
 
 
Merci d'avance pour vos réponses.


Message édité par Ummon le 05-12-2007 à 22:08:52
mood
Publicité
Posté le 05-12-2007 à 22:05:43  profilanswer
 

n°1653622
masklinn
í dag viðrar vel til loftárása
Posté le 06-12-2007 à 10:00:32  profilanswer
 

Citation :

Or, lors de la sérialisation du document XML, Firefox utilise l'encodage iso-8859-1 (a priori) et ne met d'ailleurs aucun prologue (<?xml [..] ?> ).


Le prologue XML n'est absolument pas obligatoire, et s'il n'existe pas (et que l'encodage n'est donc pas précisé) la spec XML indique que le document doit impérativement être en utf-8. D'où tires tu l'info que FF sérialise en iso-8859-1?

 

D'autre part, quel est l'intérêt de sérialiser le fichier xml reçu? Tu veux l'enregistrer sous forme de fichier en local?

Message cité 3 fois
Message édité par masklinn le 06-12-2007 à 10:01:22

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1653629
Ummon
Posté le 06-12-2007 à 10:27:12  profilanswer
 

masklinn a écrit :

Le prologue XML n'est absolument pas obligatoire, et s'il n'existe pas (et que l'encodage n'est donc pas précisé) la spec XML indique que le document doit impérativement être en utf-8. D'où tires tu l'info que FF sérialise en iso-8859-1?


Je l'ai simplement constaté en analysant les messages reçu par le serveur. Opera, au contraire, utilise bien l'utf-8.
Je ne savais pas que le prologue était facultatif, merci pour l'info.
 

masklinn a écrit :

D'autre part, quel est l'intérêt de sérialiser le fichier xml reçu? Tu veux l'enregistrer sous forme de fichier en local?


Je n'ai parlé ni de recevoir ni de fichier. Le client crée un document xml qu'il envoie au serveur à l'aide de XMLHttpRequest() via jQuery.ajax().
 
Le message posté sur le chat est composé à partir, entre autre, de l'input de l'utilisateur, tu peux tester ici : www.euphorik.ch/euphorik.
Si tu regardes le fichier js, tu verra que je suis obligé de faire une conversion explicite en utf-8 (voir la fonction to_utf8()). Sous Opera cette conversion n'est pas nécessaire puisqu'il travail déjà en utf-8.
 
Juste en passant : ma méthode de contournement ne fonctionne pas sous Konqueror, apparemment il ne considère pas mon document (parsé avec parseFromString()) comme valide. Quand c'est pas l'un c'est l'autre... vive le xml, j'aurai dû adopté le JSON, ça aurait été plus simple pour ce que je veux faire.


Message édité par Ummon le 06-12-2007 à 10:30:44
n°1653641
masklinn
í dag viðrar vel til loftárása
Posté le 06-12-2007 à 10:40:37  profilanswer
 

Comment tu fais ta requête?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1653645
Ummon
Posté le 06-12-2007 à 10:47:38  profilanswer
 

Par exemple pour l'envoie d'un message de chat :
pageMinichat.js ligne ~191 :

Code :
  1. jQuery.post("request",  this.util.xmlVersAction(this.getXMLMessage(pseudo, message, repondA)),
  2.       function(data, textStatus)
  3.       {
  4.          // TODO : traiter les erreurs
  5.          jQuery("form input.message" ).val("" )
  6.       }
  7.    )


 
la fonction : getXMLMessage() construit le document XML comme décrit dans le post initial.


Message édité par Ummon le 06-12-2007 à 10:48:20
n°1653720
MagicBuzz
Posté le 06-12-2007 à 12:25:15  profilanswer
 

En toute logique, un fichier XML généré en Ajax utilisera le charset de la page HTML qui englobe le script.
 
Je te conseille de regarder de ce côté en premier.

n°1653771
Ummon
Posté le 06-12-2007 à 13:16:24  profilanswer
 

MagicBuzz a écrit :

En toute logique, un fichier XML généré en Ajax utilisera le charset de la page HTML qui englobe le script.
 
Je te conseille de regarder de ce côté en premier.


Sans vouloir être méchant cette phrase "un fichier XML généré en Ajax" ne veut strictement rien dire. De plus je ne vois pas ce que l'encodage de la page HTML vient foutre la dedans, ta supposition est très aléatoire. De surcroît ma page utilise l'encodage utf-8.

n°1653821
masklinn
í dag viðrar vel til loftárása
Posté le 06-12-2007 à 14:05:36  profilanswer
 

Ummon a écrit :


Sans vouloir être méchant cette phrase "un fichier XML généré en Ajax" ne veut strictement rien dire. De plus je ne vois pas ce que l'encodage de la page HTML vient foutre la dedans, ta supposition est très aléatoire. De surcroît ma page utilise l'encodage utf-8.


Et le JS, par défaut, n'accèpte que des données en utf-8.
 
C'est d'ailleurs pour ça que le comportement que tu observes me choque un peu :/


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1653889
Ummon
Posté le 06-12-2007 à 15:29:10  profilanswer
 

masklinn a écrit :

Le prologue XML n'est absolument pas obligatoire, et s'il n'existe pas (et que l'encodage n'est donc pas précisé) la spec XML indique que le document doit impérativement être en utf-8.


D'après wikipedia l'encodage sans prologue est soit de l'uft-8 ou soit de l'utf-16 ce qui n'est pas la même chose mais bon ca ne fait pas beaucoup avancer le schmilblick.
C'est quand même bizarre que

Code :
  1. alert("é".charCodeAt(0))

donne 233 (#E9) qui est a priori de l'iso-8859-1 (le fichier js est évidemment encodé en utf-8).
 
J'ai fait ce test : j'ai enlevé ma fonction pourrie "to_utf8" et posté "é" avec firefox puis opera, voila le resultat en BD :

(gb@overnux)8> minichat:messages(2).
[{minichat,140,3,{1196,950996,991986},"opera","\303\251"},
 {minichat,141,4,{1196,951004,543897},"firefox","\351"}]


La fonction minichat:message(N) renvoie les N derniers messages, les caractères spéciaux sont représentés en octal. On voit que opera me donne de l'utf-8 et que firefox me donne de l'iso-8859-1.
J'ai utilisé cette page pour voire les différents code de 'é'.
 
Conclusion : bein je ne suis toujours pas plus avancé  :D.


Message édité par Ummon le 06-12-2007 à 15:59:25
n°1654496
cosmoschtr​oumpf
dawa powered
Posté le 07-12-2007 à 14:03:47  profilanswer
 

question con : t'as vérifié l'encodage qu'utilise ton éditeur de texte ?
et l'encodage qu'envoie la page qui génère le xml ? (si c'est le cas)


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
mood
Publicité
Posté le 07-12-2007 à 14:03:47  profilanswer
 

n°1654522
Ummon
Posté le 07-12-2007 à 14:37:38  profilanswer
 

cosmoschtroumpf a écrit :

question con : t'as vérifié l'encodage qu'utilise ton éditeur de texte ?
et l'encodage qu'envoie la page qui génère le xml ? (si c'est le cas)


ouaip, tout est en utf-8, le bouzin se trouve ici http://www.euphorik.ch/euphorik/

n°1654772
mIRROR
Chevreuillobolchévik
Posté le 07-12-2007 à 19:01:49  profilanswer
 

Ummon a écrit :


ouaip, tout est en utf-8, le bouzin se trouve ici http://www.euphorik.ch/euphorik/

fake

Citation :

Server: Yaws/1.73 Yet Another Web Server
Date: Fri, 07 Dec 2007 17:59:37 GMT
Last-Modified: Tue, 04 Dec 2007 15:26:22 GMT
Etag: "18JBpYAM6jc"
Content-Length: 1942
Content-Type: text/html

y a pas d encoding spécifié et donc par defaut ca passe sur un encoding local iso-8859-1(5)


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1654805
Ummon
Posté le 07-12-2007 à 21:08:20  profilanswer
 

mIRROR a écrit :

y a pas d encoding spécifié...(5)


L'encodage est définit au niveau du document XHTML : "<?xml version="1.0" encoding="UTF-8" ?>"
Quant à l'encodage du fichier JavaScript et bien l'interpréteur s'en tape de son codage, ce qui compte c'est que je sais que le fichier js est en utf-8 et que l'affichage est en utf-8.
 

mIRROR a écrit :

...et donc par defaut ca passe sur un encoding local iso-8859-1


Ya une norme qui dit ça ? Il me semble que ça dépend de l'implémentation.
D'ailleurs si je regarde ce code Javascript avec Firefox : http://www.euphorik.ch/euphorik/js/euphorik.js, il me l'affiche en utf-8 par défaut bien qu'au niveau HTTP on en sache rien. Magie ?

Message cité 1 fois
Message édité par Ummon le 07-12-2007 à 21:09:41
n°1654836
mIRROR
Chevreuillobolchévik
Posté le 07-12-2007 à 23:38:37  profilanswer
 

Ummon a écrit :


L'encodage est définit au niveau du document XHTML : "<?xml version="1.0" encoding="UTF-8" ?>"


 
sauf que si ton serveur sert tes pages en iso ca vaut pas un kopeck :/
et comme ta page est servie en text le prologue xml vaut rien  
 

Ummon a écrit :

le fichier js est en utf-8


 
peut etre
 

Ummon a écrit :

l'affichage est en utf-8


 
non
 

Ummon a écrit :


Ya une norme qui dit ça ? Il me semble que ça dépend de l'implémentation.


 
oui oui  et oui
le serveur override tout
 

Ummon a écrit :


D'ailleurs si je regarde ce code Javascript avec Firefox : http://www.euphorik.ch/euphorik/js/euphorik.js, il me l'affiche en utf-8 par défaut bien qu'au niveau HTTP on en sache rien. Magie ?


 
cherches toi des excuses si ca t amuse j essaie juste d aider hein :/


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1654926
Ummon
Posté le 08-12-2007 à 13:31:43  profilanswer
 

Ok pour tes remarques, je vais essayer de voir comment spécifier le charset... c'est pas gagner dans toute la doc de yaws il n'y a mention ni du mot 'encoding' ni du mot 'charset' ... super...
 
Tu crois que ca pourrait être à l'origine de mon problème ?

n°1654961
cosmoschtr​oumpf
dawa powered
Posté le 08-12-2007 à 15:05:34  profilanswer
 

tu génère ton xml en quel langage de prog ?


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
n°1654995
Ummon
Posté le 08-12-2007 à 16:41:16  profilanswer
 

cosmoschtroumpf a écrit :

tu génère ton xml en quel langage de prog ?


Euh... en Javascript...

n°1654997
cosmoschtr​oumpf
dawa powered
Posté le 08-12-2007 à 16:46:49  profilanswer
 
n°1655004
gilou
Modérateur
Modzilla
Posté le 08-12-2007 à 17:03:37  profilanswer
 

masklinn a écrit :

Le prologue XML n'est absolument pas obligatoire

En XML 1.0, mais pas en XML 1.1, non?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1655006
Ummon
Posté le 08-12-2007 à 17:11:02  profilanswer
 


euh... t'as autre chose à me proposer ? Je ne vois aucune alternative...

n°1655139
masklinn
í dag viðrar vel til loftárása
Posté le 09-12-2007 à 02:38:17  profilanswer
 

gilou a écrit :

En XML 1.0, mais pas en XML 1.1, non?
A+,


Aucune idée, ya des gens qui se basent sur 1.1 plutôt que 1.0 dans la vraie vie?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1655488
cosmoschtr​oumpf
dawa powered
Posté le 09-12-2007 à 21:49:46  profilanswer
 

Ummon a écrit :

euh... t'as autre chose à me proposer ? Je ne vois aucune alternative...


nan, c'est juste que c'était marqué en gros dans le titre, alors je me demandais bien pourquoi je posais la question :o
 
je connais pas assez bien le JS pour te répondre du coup, à part regarder la doc de ton serveur pour qu'il sorte de l'UTF-8 par défaut, mais apparament tu trouves pas de doc là-dessus... sinon, tout repasser en ISO, mais bon :D


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
n°1655496
FlorentG
Unité de Masse
Posté le 09-12-2007 à 21:58:13  profilanswer
 

masklinn a écrit :

Aucune idée, ya des gens qui se basent sur 1.1 plutôt que 1.0 dans la vraie vie?


A mon avis, y'a 98% de gens qui savent même pas que ça existe. Ou qui pensent que les changements ne justifient pas de passer au 1.1....


Message édité par FlorentG le 09-12-2007 à 21:58:26
n°1655497
gilou
Modérateur
Modzilla
Posté le 09-12-2007 à 21:59:21  profilanswer
 

masklinn a écrit :


Aucune idée, ya des gens qui se basent sur 1.1 plutôt que 1.0 dans la vraie vie?

Faut vivre avec son temps ;)
C'est une des diffs si je lis bien la spec: l'en tête <?xml version="1.1" ... ?> est obligatoire, meme pour les fragments, et meme pour le well formed.
S'il n'y a pas cela, alors c'est du XML 1.0
A+,

Message cité 1 fois
Message édité par gilou le 09-12-2007 à 22:02:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1655507
masklinn
í dag viðrar vel til loftárása
Posté le 09-12-2007 à 22:08:10  profilanswer
 

gilou a écrit :

Faut vivre avec son temps ;)


Je vis avec mon temps, j'évite le XML autant que possible.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1655514
Ummon
Posté le 09-12-2007 à 22:28:36  profilanswer
 

masklinn a écrit :


Je vis avec mon temps, j'évite le XML autant que possible.


Tu préconiserais quoi dans un cas d'échange de messages simples entre serveur et clients (genre un peu ce que je suis en train de faire) ? JSON ? YAML ? texte brut ? binaire ? ...

n°1655518
mIRROR
Chevreuillobolchévik
Posté le 09-12-2007 à 22:42:54  profilanswer
 

json :o


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1655596
masklinn
í dag viðrar vel til loftárása
Posté le 10-12-2007 à 07:59:58  profilanswer
 

Ummon a écrit :


Tu préconiserais quoi dans un cas d'échange de messages simples entre serveur et clients (genre un peu ce que je suis en train de faire) ? JSON ? YAML ? texte brut ? binaire ? ...


JSON (+ REST si applicable), si pas suffisant monter au YAML, si pas assez efficace (besoin d'un protocole binaire) un truc genre ASN.1
 
Ca me semble un bon début :D


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1659120
Max_Barel
Posté le 17-12-2007 à 00:31:14  profilanswer
 

mise au point: j'ai posté dans la mauvaise discussion, celle-ci n'est pas exactement sur le même sujet.
Je laisse le message, car il peut être utile dans ce contexte aussi.
 
Il me semble que cette discussion part un peu dans tous les sens, sans que le point clé n'y ait été mentionné:
Pour que le code javascript soit interprété en UTF-8 il faut que le charset soit précisé pour le script, quel que soit l'encodage du document principal :
<script type="text/javascript" charset="UTF-8" src="moncode.js"/>


Message édité par Max_Barel le 17-12-2007 à 00:33:55
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JavaScript] Spécification de l'encodage d'un document XML

 

Sujets relatifs
problème de fonction javascriptJavascript:Pb de gestion d'erreur en javascript
Passer une variable php dasn un script javascript[Résolu]Javascript, div, visibility et position
Envoyer dans une autre frame des infos via javascript[Sybase,Xml] Extraction Sybase => XML
excel et microsfot office document imagingJavascript et IE7 : probleme de taille !
Encodage caracteres - problemes chroniques[XML / XSL] Interpreter les DTD internes
Plus de sujets relatifs à : [JavaScript] Spécification de l'encodage d'un document XML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR