Question : pb accents en utf8

Question : pb accents en utf8 - Java - Programmation

Marsh Posté le 22-08-2003 à 08:57:09    

Bonjour,
 
Mon problème concerne l'affichage des accents en iso ou utf8.
 
Je récupère le contenu d'une page html (page1) via un objet HttpURLConnection. Je copie ensuite ce contenu dans une nouvelle page html (page2). Il n'y a pas de problème d'affichage dans page2 lorsque page1 est de la forme :  

Code :
  1. <html>
  2. ...
  3. </html>


 
En revanche, il y un problème d'accent lorsque page1 est de la forme :

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  4. <head>
  5. <title>Les résultats</title>
  6. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  7. <meta http-equiv="Content-language" content="fr" />
  8. .....
  9. </html>


 
Dans ce cas, page2 ne gère pas les accents (car la page est codée en utf8). Ce que je ne comprends pas, c'est que j'ai toujours ce problème d'accent lorsque je supprime les lignes qui indique que la page est codée en utf8 (appel à une regex pour la suppression de ces infos).
 
Quelqu'un peut-il m'expliquer pourquoi?
Comment faire pour que page2 affiche bien les accents? (en iso)
 
Si vous avez besoin de plus de précisions, n'hésitez pas à me les demander.
Merci.

Reply

Marsh Posté le 22-08-2003 à 08:57:09   

Reply

Marsh Posté le 22-08-2003 à 08:58:22    

Bin tu peux pas mettre d'accents en UTF-8 [:mlc]
 
Utilise un code ISO-8859-1 par exemple à la place. Y a des gens qui se cherchent des problèmes, exagéré [:wam]

Reply

Marsh Posté le 22-08-2003 à 09:51:56    

DarkLord a écrit :

Bin tu peux pas mettre d'accents en UTF-8 [:mlc]
 
Utilise un code ISO-8859-1 par exemple à la place. Y a des gens qui se cherchent des problèmes, exagéré [:wam]


 
Bon, Ok! J'ai une autre question.
Voici mon code pour transformer une chaine, codée en ISO, en UTF-8.
Apparement il ne marche pas puisqu'il met des points d'interogation à la place des accents. Y'a-t-il une explication?
Merci de ta patience !  ;)  
 

Code :
  1. try{
  2. ch_utf=new String(ch.getBytes("ISO-8859-1" ), "UTF-8" );
  3. }
  4. catch(UnsupportedEncodingException uee)
  5.  {System.err.println(uee);}

Reply

Marsh Posté le 22-08-2003 à 09:57:20    

DarkLord a écrit :

Bin tu peux pas mettre d'accents en UTF-8 [:mlc]


bien ssûr que tu peux ... à condition d'enregistrer le fichier en UTF-8 et de le lire ensuite en UTF-8 :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 09:57:39    

DarkLord a écrit :

Bin tu peux pas mettre d'accents en UTF-8 [:mlc]
 
Utilise un code ISO-8859-1 par exemple à la place. Y a des gens qui se cherchent des problèmes, exagéré [:wam]

:non: tout marche très bien en utf-8. aussure toi que ton source est en UTF-8 et que le navigateur en face est capable de le décoder. l'utf-8, c'est bien mieux que tous ces iso à la con.

Reply

Marsh Posté le 22-08-2003 à 10:01:09    

pilou50 a écrit :


Code :
  1. try{
  2. ch_utf=new String(ch.getBytes("ISO-8859-1" ), "UTF-8" );
  3. }
  4. catch(UnsupportedEncodingException uee)
  5.  {System.err.println(uee);}

 


ce que tu fais n'a pas de sens : une String en Java n'a pas de codage. C'est au moment où tu vas transformer ta Strig java en donnée binaire (écriture dans un fichier) que là c'est important d'utiliser le bon encodage.
 
mais l'opération que tu fais au dessus n'as pas sens ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 10:01:32    

Taz a écrit :

:non: tout marche très bien en utf-8. aussure toi que ton source est en UTF-8 et que le navigateur en face est capable de le décoder. l'utf-8, c'est bien mieux que tous ces iso à la con.


 
euh ok [:wam]
 
pq qd j'écris un document XML en UTF-8 avec un accents il me jette (que ce soit mozilla, IE ou autre)
 
qqun peut m'expliquer?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:09:38    

il te jète comment?

Reply

Marsh Posté le 22-08-2003 à 10:18:41    

Taz a écrit :

il te jète comment?


 
w8 je fais un test ;)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:21:21    

Taz a écrit :

il te jète comment?


 
Mon test
 

Code :
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <test>
  3.   <element type="accents">Coucou éèçà^$¨i¨</element>
  4.   <element type="normal">Hello World</element>
  5. </test>


 
mozilla ne me jette pas mais j'ai des caractères bizarres comme prévu ;)
 

Citation :


<test>
<element type="accents">Coucou ����^$�i�</element>
<element type="normal">Hello World</element>
</test>


 
 
IE
 

Citation :


An invalid character was found in text content. Error processing resource 'file:///C:/Documents and Settings/snicoll/Desktop/test.xml'. Line 3, Position 34  
 
  <element type="accents">Coucou  


Message édité par darklord le 22-08-2003 à 10:23:19

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:21:21   

Reply

Marsh Posté le 22-08-2003 à 10:24:32    

benou a écrit :


ce que tu fais n'a pas de sens : une String en Java n'a pas de codage. C'est au moment où tu vas transformer ta Strig java en donnée binaire (écriture dans un fichier) que là c'est important d'utiliser le bon encodage.
 
mais l'opération que tu fais au dessus n'as pas sens ...
 


 
Merci, ton explication est claire.
Mais je veux écrire en utf8 sur la sortie standard (System.out) et aussi dans un fichier. Comment je peux faire?
 
Merci !

Reply

Marsh Posté le 22-08-2003 à 10:28:22    

il te manque un " blaireau

Reply

Marsh Posté le 22-08-2003 à 10:29:31    

Taz a écrit :

il te manque un " blaireau  


 
le blaireau il t'emmerde pov type. Regarde mon edit déjà


Message édité par darklord le 22-08-2003 à 10:29:49

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:38:48    

pilou50 a écrit :


Merci, ton explication est claire.
Mais je veux écrire en utf8 sur la sortie standard (System.out) et aussi dans un fichier. Comment je peux faire?
Merci !


Code :
  1. OutptStream out = System.out;
  2. // ou bien  
  3. // OutptStream out = new FileOutputSream("toto.txt" );
  4. Writer outEncoder = new OutputStreamWriter(out, "UTF-8" );
  5. outEncoder.write("éàèô" ); // ce sera encodé en UTF-8
  6. ensuite il faut que tu ouvres ton fichier avec un éditeur capable de voir que c'est de l'UTF-8 ce qui n'est pas forcément évident.
  7. remarque : sur la sortie standard, tu veras certainement les caractères de façon bizare. Si t'es sous windows, l'encoding du shell dos est pas de l'utf-8 : c'est un encodage microsoft à la con. sous linux je sais pas :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 10:40:22    

DarkLord a écrit :


pq qd j'écris un document XML en UTF-8 avec un accents il me jette (que ce soit mozilla, IE ou autre)
qqun peut m'expliquer?


surement parce que ton fichier n'est pas sauvegarder (au sens stockage binaire) en UTF-8 mais en ISO-machin-1 (qui est l'encodage par défaut des OS européens)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 10:41:13    

benou a écrit :


surement parce que ton fichier n'est pas sauvegarder (au sens stockage binaire) en UTF-8 mais en ISO-machin-1 (qui est l'encodage par défaut des OS européens)


 
quel est l'intérêt de spécifier l'encodage alors. Tu peux me donner un lien ou qqch qui explique ca stp?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:42:07    

DarkLord a écrit :


 
le blaireau il t'emmerde pov type. Regarde mon edit déjà

chez moi ça, marche, je viens de faire la manip avec word comme éditeur utf-8

Reply

Marsh Posté le 22-08-2003 à 10:51:18    

DarkLord a écrit :


quel est l'intérêt de spécifier l'encodage alors. Tu peux me donner un lien ou qqch qui explique ca stp?


ben réfléchis plutot !
 
un fichier c'est un ensemble d'octets. les carctères normaux sont tous sauvegarder de la même façon. Par contre les carctères spéciaux peuvent avoir plusieurs codages binaires différents => un même codage binaire pourra avoir plsuieurs significations différente en fonction du charset dans lequel tu as choisit d'interpréter le fichir binaire.
 
Quand tu sauvegardes un fichier. Si celui-ci contient des car. spéciaux, le prog qui sauvegarde va les encoder dans un charset. Très souvent c'est le charset local => ISO-machin-1 en europe. Le problème c'est que dans un fichier texte, rien n'indique dans quel charset le fichier a été sauvegardé => un autre prog qui devra lire le fichier va le lire en fonction de son charset à lui. Si c'est le même tout se passe bien. Si c'est pas le même, on se retrouve avec des carré et des '?' à rire la rigo.
 
pour éviter ce problème des fichiers texte, en XML on indique l'encodage qui est utilisé => quand tu enregistres un fichier XML, tu utilises un certain charset et tu l'indique dans l'entête XML du fichier de façon à ce que les autres programmes qui le liront sauront quel charset utiliser pour le lire.
 
Bien sûr, si tu utilises un éditeur text pour lire ou écrire un fichier XML, rien ne t'assure que le charset que tu indiques dans l'entête XML soit le même que le charset utilisé par l'éditeur de texte pour lire/écrire le fichier. Par contre, les parsers et les éditeurs XML gèrent tous ce méchanisme (heureusement).
 
Vous remarquerez que l'entête d'un fichier XML ne contient pas de carctères spéciaux et c'est pour ca que les parsers peuvent commencer à lire le fichier sans connaître à l'avance le charset à utiliser. une fois qu'ils ont lu l'entête ils savent quel charset utiliser pour la lecture de la suite du document.
 
Donc dark, pour répondre à ta question : si ton doc XML ne lisait pas correctement sur un browser, c'est certainement parce que tu écrit charset="UTF-8" daans l'entête mais que tu as pas fait gaffe au charset utilisé pour sauvegarder ton document et qui était certainement l'ISO-machin-1 ...
 
capiché ?
 
edit : désolé pour les fautes, j'ai pas le courage de tout relire :o


Message édité par benou le 22-08-2003 à 10:52:09

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 10:52:05    

non mais je nie pas ce que vous dites hein. Vu que j'étais un peu perdu sur le sujet, je ne reste pas sur mes positions. Maintenant je voudrais bien qu'on m'explique pq les accents ne sont pas correctement affichés en utf8, stou :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:52:30    

DarkLord a écrit :

non mais je nie pas ce que vous dites hein. Vu que j'étais un peu perdu sur le sujet, je ne reste pas sur mes positions. Maintenant je voudrais bien qu'on m'explique pq les accents ne sont pas correctement affichés en utf8, stou :o


lis mon post :o
 
et là je les mérite mes points bourdail  !! :o :o


Message édité par benou le 22-08-2003 à 10:52:56

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 10:53:43    

benou a écrit :


capiché ?


 
[:prosterne] [:prosterne] [:prosterne] [:prosterne] [:prosterne] [:prosterne] [:prosterne] [:prosterne] [:prosterne] [:prosterne]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:53:49    

benou a écrit :


Code :
  1. OutptStream out = System.out;
  2. // ou bien  
  3. // OutptStream out = new FileOutputSream("toto.txt" );
  4. Writer outEncoder = new OutputStreamWriter(out, "UTF-8" );
  5. ....




 
Je vais tester tout ça, je te tiens au courant.
Thx!
 
 

Reply

Marsh Posté le 22-08-2003 à 10:54:03    

benou a écrit :


lis mon post :o
 
et là je les mérite mes points bourdail  !! :o :o


 
j'ai posté presque en meme temps que toi :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-08-2003 à 10:54:36    

Taz a écrit :

aussure toi que ton source est en UTF-8

[:quoted]
 
et je ne citerai pas benou
 
comme dit en suite, même éditer avec word ça marche

Reply

Marsh Posté le 22-08-2003 à 10:56:12    


:)
 
je fais le malin parce que maintenant j'ai compris, mais moi aussi j'en ai chié pour comprendre le truc quand j'y ait été confronté (saloperie de téléphones portables qui gèrent que l'UTF-8 !!! :fou: )
 
en fait c'est tout con, mais j'avais jamais capté que un bête fichier text pouvait poser autant de problème : c'est bizarre que ce cas là soit pas aborder durant les études d'infos...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 11:00:28    

l'utf-8, c'est bien. et puis c'est compatible ascii.
sans utf-8, imagine le bordel si tu veux diffusé un document, ne serait-ce qu'en Europe :sweat:

Reply

Marsh Posté le 22-08-2003 à 11:09:30    

Taz a écrit :

l'utf-8, c'est bien. et puis c'est compatible ascii.
sans utf-8, imagine le bordel si tu veux diffusé un document, ne serait-ce qu'en Europe :sweat:


c'est quoi cette remarque ???
 
en s'en fout de l'encodage. Le problème c'est qu'il y en a plusieurs ! si tout le monde se servait du même, quelqu'il soit, il y aurait aucun de problème !


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 11:10:57    

En passant, j'ai les apostrophes en utf-8 qui deviennent des '?' en iso-8859-1, alors que c'est correctement converti vers du windows-1252. Quel est le problème ?


Message édité par Krueger le 22-08-2003 à 11:12:27

---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 22-08-2003 à 11:15:07    

surement que le codage des apostrophe en utf-8 et en windows-1252 est le même [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 11:28:58    

comme j'ai dit plus haut, l'utf-8 est compatible ascii, le reste n'est que pure coïncidence. les caractères utf-8 peuvent être multi-octets

Reply

Marsh Posté le 22-08-2003 à 11:48:14    

Taz a écrit :

comme j'ai dit plus haut, l'utf-8 est compatible ascii, le reste n'est que pure coïncidence. les caractères utf-8 peuvent être multi-octets


et ???? tu réponds à qui là ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 12:07:51    

benou a écrit :


et ???? tu réponds à qui là ?
 

bah au fait que les ' rendent pareil...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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