Merci beaucoup Erik ! Maintenant j'y vois enfin plus clair ! :) Je vais
faire les modifs nécessaires .
Cordialement,
François
Erik Mazoyer wrote:
>Pour travailler en Java avec les flux de caractères (en opposition avec les flux binaires),
>il faut utiliser les notions :
>Java.io.Reader
>Java.io.Writer
>
>URLEncoder et URLDecoder ne servent qu'a encoder des caractères au sein d'une URL, c'est-à-dire :
>
># The alphanumeric characters "a" through "z", "A" through "Z" and "0" through "9" remain the same.
># The special characters ".", "-", "*", and "_" remain the same.
># The space character " " is converted into a plus sign "+".
># All other characters are unsafe and are first converted into one or more bytes using some encoding scheme. Then each byte is represented by the 3-character string "%xy", where xy is the two-digit hexadecimal representation of the byte. The recommended encoding scheme to use is UTF-8. However, for compatibility reasons, if an encoding is not specified, then the default encoding of the platform is used.
>
>Bref, ça ne s'emploie pas en XML (sauf cas extremement rares, qui ne correspondent pas à ton cas).
>
>
>Si tu connais l'encodage de ton flux binaire en lecture :
>
>InputStream is = ...; // récéption du flux binaire
>Reader myReader = new InputStreamReader(is,"UTF-8");
>
>Maintenant toute lecture sur ton Reader se fera en décodant de l'UTF-8.
>Ce reader peut être la source d'une lecture XML.
>
>
>Pour l'écriture
>OutputStream os = new ...; // tu crées un flux binaire de sortie, a toi de déterminer ou tu écris, ça peut être un fichier, un flux reseau, etc.
>Writer myWriter = new OutputStreamWriter(os,"ISO-8859-1");
>
>Maintenant toute écriture sur ton Reader se fera en encodant en ISO Latin 1.
>Attention, si tu écris des caractères n'étant pas codés en ISO Latin 1, tu aura une erreur
>Ce reader peut être la cible d'une écriture XML.
>
>Enfin pour filtrer, afin d'écrire des entités pour les caractères non ISO Latin 1par exemple, il suffit d'écrire un FilterWriter
>
>Class isoLatin1Writer extends FilterWriter {
> public isoLatin1Writer(Writer out) {
> super(out);
> }
> public void write(int c) throws IOException {
> if(c<256) {
> super.write(c);
> } else {
> super.write("&#");
> super.write(Integer.toString(c));
> super.write(";");
> }
> }
> public void write(char[] cbuf,
> int off,
> int len) throws IOException {
> for(int i=0; i<len; i++) {
> write(cbuf[off+i]);
> }
> public void write(String str,
> int off,
> int len) throws IOException {
> for(int i=0; i<str.length(); i++) {
> write(str.charAt(off+i));
> }
>}
>J'ai écris la classe dans le mél je ne m'engage pas qu'il n'y ai pas d'erreur de frappe.
>Par contre pour la façon de faire, c'est sur :)
>
>Ensuite ton writer devient :
>Writer myWriter =
> new isoLatin1Writer (
> new OutputStreamWriter(os,"iso-8859-1")
> );
>
>Toute écriture pourra se faire en Unicode. Ton isoLatin1Writer enverra une entité &#...; à OutputStreamWriter pour tous les caractères au delà de 255. La compatibilité ISO Latin 1 est vérifiée.
>
>Résumé :
>
>
>2/ Mon deuxième est une appli java d'indexation qui récupère les données
>de mon premier en utf-8 et les indexe en iso-8859-1 (avec
>URLDecoder.decode(la chaine du serveur webdav, "utf8") : à ce moment
>précis je pensais tenir de l'iso-8859-1 (charset du système).
>
>Non, URLDecoder.decode ne sert pas à cela.
>Il faut écrire
>Reader myReader = new InputStreamReader(is,"UTF-8");
>Writer myWriter = new OutputStreamWriter(os,"ISO-8859-1");
>
>Il te faudra gérer les caractères Unicode non ISO Latin 1.
>Tu en fais quoi ?
>Pourquoi passer par un intermédiaire ISO Latin 1 alors que l'entrée et la sortie sont en Unicode ?
>
>3/ Mon troisième est une appli front-end cocoon/java qui récupère du xml
>iso-8859-1 de mon premier(resultat d'une recherche) et doit l'afficher
>en html utf-8 à travers une transfo XSLT + sérialisation HTML utf8.
>
>A priori, aucun problème en vue si tout est bien spécifié (je suis un enfant illegitime de Lapalisse).
>
>
>Cordialement,
>
>
>--------------------------------------------------------------------
>Erik Mazoyer, Chef de projet
>HyperOffice
>6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
>Tél. 01 41 96 96 76
>Fax 01 41 96 96 77
>Mél erik.mazoyer@hyperoffice.fr
>
>Nouveau cycle de séminaires "les mardis d'HyperOffice" Inscriptions et renseignements : http://www.hyperoffice.fr/formation/catalogue/index.asp
>
>
>-----Message d'origine-----
>De : François Jannin [mailto:issar@free.fr]
>Envoyé : mardi 10 janvier 2006 16:16
>À : xml-tech@xmlfr.org
>Objet : [xml-tech] Re: RE : Re: RE : j'y perd mon latin iso-8859-1
>
>
>Erik Mazoyer wrote:
>
>
>
>>>Ce n'est pas forcément vrai, personnellement j'utilise
>>>Encode (http://search.cpan.org/~dankogai/Encode-2.12/Encode.pm).
>>>
>>>
>>>
>>>
>>Quand je disait "facilement", je voulais dire normatif ou presque (par
>>exemple la reconnaissance par les premiers caractères n'est pas
>>"normative" mais se trouve décrite dans la norme "xml 1.0" et la norme
>>"xml 1.1").
>>
>>En java (je prêche pour ma paroisse) il est "simple" de poser un filtre
>>sur un Writer pour encoder "automatiquement" les entités.
>>
>>
>>
>>
>Je travaille en Java, ça tombe bien. Peux-tu donner un exemple ou un
>lien sur ces filtres de Writer ?
>J'ai l'impression que je me suis compliquée la vie avec
>l'URLEncoder/Decoder pour rien.
>
>Pour résumer ma problèmatique sous forme de rébus :
>
>1/ Mon premier est un serveur WEBDAV stockant des métadonnées en utf-8
>2/ Mon deuxième est une appli java d'indexation qui récupère les données
>de mon premier en utf-8 et les indexe en iso-8859-1 (avec
>URLDecoder.decode(la chaine du serveur webdav, "utf8") : à ce moment
>précis je pensais tenir de l'iso-8859-1 (charset du système)
>3/ Mon troisième est une appli front-end cocoon/java qui récupère du xml
>iso-8859-1 de mon premier(resultat d'une recherche) et doit l'afficher
>en html utf-8 à travers une transfo XSLT + sérialisation HTML utf8. 3/ Et mon tout donne un casse-tête chinois ressemblant à un générateur
>d'improbabilités :)
>
>Malgré moult tests j'obtiens soit des caractères bizarres par-ci ou des
>multi-byte error par-là. Par exemple, j'envoie une requête avec accents
>latin-1(eh oui ! du français !) url-encodée en utf-8 et impossible de
>l'utliser pour la recherche, même aprés avoir essayé toutes combinaisons
>d'encodage/décodage avec URLDecoder/Encoder.
>
>Merci mille fois de votre aide.
>Cordialement,
>François.
>
>
>--
>Devenez redacteur <XML>fr et contribuez au developpement du
>xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
>Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
>
>Cette liste est a votre disposition pour discuter en francais de
>tout sujet technique lie a XML.
>
>Pour resilier votre abonnement, envoyez un message contenant
>la commande "unsubscribe" a xml-tech-request@xmlfr.org
>(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
>
>
>
>--
>Devenez redacteur <XML>fr et contribuez au developpement du
>xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
>Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
>
>Cette liste est a votre disposition pour discuter en francais de
>tout sujet technique lie a XML.
>
>Pour resilier votre abonnement, envoyez un message contenant
>la commande "unsubscribe" a xml-tech-request@xmlfr.org
>(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
>
>
>
>
>
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Wed Jan 11 10:12:03 2006