En particulier, la bibliothèque doit-elle faire quelque chose du style
Encode::encode("UTF-8",$data)
sur toutes les données récupérées de l'application avant de les insérer
dans le flux XML et réciproquement decode() à partir du flux XML avant
de retourner les données ?
En particulier, la bibliothèque doit-elle faire quelque chose du style
Encode::encode("UTF-8",$data)
sur toutes les données récupérées de l'application avant de les insérer
dans le flux XML et réciproquement decode() à partir du flux XML avant
de retourner les données ?
En particulier, la bibliothèque doit-elle faire quelque chose du style
Encode::encode("UTF-8",$data)
sur toutes les données récupérées de l'application avant de les insérer
dans le flux XML et réciproquement decode() à partir du flux XML avant
de retourner les données ?
Je ne sais pas si j'ai été très clair. Il faudrait vraiment que je rédige le
document que je prévois depuis si longtemps à ce sujet.
Je ne sais pas si j'ai été très clair. Il faudrait vraiment que je rédige le
document que je prévois depuis si longtemps à ce sujet.
Je ne sais pas si j'ai été très clair. Il faudrait vraiment que je rédige le
document que je prévois depuis si longtemps à ce sujet.
C'est clair mais je n'y trouve pas la réponse à ma question :-(
Simplifions le problème. Mettons qu'on ait un module qui implémente une
classe Personne, avec des accesseurs, nom() prenom() adresse()
commentaire() etc...
Et une méthode as_string() qui créé un document XML à partir des
données dans l'objet : pour créer le document XML peut-on prendre
directement les chaînes que les utilisateurs auront mises dans les
accesseurs précédemment, ou faut-il les traiter d'une façon ou d'une
autre (avec le postulat que le XML est en UTF-8) ?
C'est clair mais je n'y trouve pas la réponse à ma question :-(
Simplifions le problème. Mettons qu'on ait un module qui implémente une
classe Personne, avec des accesseurs, nom() prenom() adresse()
commentaire() etc...
Et une méthode as_string() qui créé un document XML à partir des
données dans l'objet : pour créer le document XML peut-on prendre
directement les chaînes que les utilisateurs auront mises dans les
accesseurs précédemment, ou faut-il les traiter d'une façon ou d'une
autre (avec le postulat que le XML est en UTF-8) ?
C'est clair mais je n'y trouve pas la réponse à ma question :-(
Simplifions le problème. Mettons qu'on ait un module qui implémente une
classe Personne, avec des accesseurs, nom() prenom() adresse()
commentaire() etc...
Et une méthode as_string() qui créé un document XML à partir des
données dans l'objet : pour créer le document XML peut-on prendre
directement les chaînes que les utilisateurs auront mises dans les
accesseurs précédemment, ou faut-il les traiter d'une façon ou d'une
autre (avec le postulat que le XML est en UTF-8) ?
Dans ces conditions, il faut un Encode::encode quelque part, et je dirais
que la bonne place où le mettre, c'est tout près du code qui remplace & par
&.
Réciproquement, pour from_xml_data, il faut un Encode::decode, qui se
trouvera naturellement là où & est remplacé par un simple &.
Dans ces conditions, il faut un Encode::encode quelque part, et je dirais
que la bonne place où le mettre, c'est tout près du code qui remplace & par
&.
Réciproquement, pour from_xml_data, il faut un Encode::decode, qui se
trouvera naturellement là où & est remplacé par un simple &.
Dans ces conditions, il faut un Encode::encode quelque part, et je dirais
que la bonne place où le mettre, c'est tout près du code qui remplace & par
&.
Réciproquement, pour from_xml_data, il faut un Encode::decode, qui se
trouvera naturellement là où & est remplacé par un simple &.
Ok. Mieux vaut alors un seul Encode::encode sur toute la chaîne qui a
été créé par concaténation de morceaux statiques et de données
utilisateur, ou un Encode::encode sur chaque donnée des utilisateurs,
puis une concaténation ?
Ok, aussi, même si je pensais que le parseur XML faisait cette dernière
transformation (XML::LibXML dans mon cas).
Ok. Mieux vaut alors un seul Encode::encode sur toute la chaîne qui a
été créé par concaténation de morceaux statiques et de données
utilisateur, ou un Encode::encode sur chaque donnée des utilisateurs,
puis une concaténation ?
Ok, aussi, même si je pensais que le parseur XML faisait cette dernière
transformation (XML::LibXML dans mon cas).
Ok. Mieux vaut alors un seul Encode::encode sur toute la chaîne qui a
été créé par concaténation de morceaux statiques et de données
utilisateur, ou un Encode::encode sur chaque donnée des utilisateurs,
puis une concaténation ?
Ok, aussi, même si je pensais que le parseur XML faisait cette dernière
transformation (XML::LibXML dans mon cas).
S'agissant d'UTF-8, c'est équivalent. Mais il me semble plus logique de
le faire chaîne par chaîne.
Ok, aussi, même si je pensais que le parseur XML faisait cette dernière
transformation (XML::LibXML dans mon cas).
Ah, mais ça change tout. On n'est plus en train de parler à l'extérieur qui
manipule des octets, là : on est en train de parler à une bibliothèque, et
c'est cette bibliothèque qui parle à l'extérieur.
S'agissant de XML::LibXML, je viens de mener quelques tests, et elle se
comporte comme je l'apprécie :
- les fonctions de manipulation de l'arbre XML prennent ou renvoient des
chaînes de caractères Unicode ;
- ses fonctions de sortie utilisent des chaînes d'octets.
Il faut bien comprendre qu'il n'y a à utiliser encode/decode que quand on
passe d'un monde à l'autre, et qu'une interface bien faite place ce
changement au bord du programme. Si on est en train d'implémenter
l'interface, il est clair qu'il faut s'en soucier. Mais si on utilise une
interface déjà faite, et bien conçue, il n'y a rien à faire. En l'occurence,
XML::LibXML fait bien les choses.
S'agissant d'UTF-8, c'est équivalent. Mais il me semble plus logique de
le faire chaîne par chaîne.
Ok, aussi, même si je pensais que le parseur XML faisait cette dernière
transformation (XML::LibXML dans mon cas).
Ah, mais ça change tout. On n'est plus en train de parler à l'extérieur qui
manipule des octets, là : on est en train de parler à une bibliothèque, et
c'est cette bibliothèque qui parle à l'extérieur.
S'agissant de XML::LibXML, je viens de mener quelques tests, et elle se
comporte comme je l'apprécie :
- les fonctions de manipulation de l'arbre XML prennent ou renvoient des
chaînes de caractères Unicode ;
- ses fonctions de sortie utilisent des chaînes d'octets.
Il faut bien comprendre qu'il n'y a à utiliser encode/decode que quand on
passe d'un monde à l'autre, et qu'une interface bien faite place ce
changement au bord du programme. Si on est en train d'implémenter
l'interface, il est clair qu'il faut s'en soucier. Mais si on utilise une
interface déjà faite, et bien conçue, il n'y a rien à faire. En l'occurence,
XML::LibXML fait bien les choses.
S'agissant d'UTF-8, c'est équivalent. Mais il me semble plus logique de
le faire chaîne par chaîne.
Ok, aussi, même si je pensais que le parseur XML faisait cette dernière
transformation (XML::LibXML dans mon cas).
Ah, mais ça change tout. On n'est plus en train de parler à l'extérieur qui
manipule des octets, là : on est en train de parler à une bibliothèque, et
c'est cette bibliothèque qui parle à l'extérieur.
S'agissant de XML::LibXML, je viens de mener quelques tests, et elle se
comporte comme je l'apprécie :
- les fonctions de manipulation de l'arbre XML prennent ou renvoient des
chaînes de caractères Unicode ;
- ses fonctions de sortie utilisent des chaînes d'octets.
Il faut bien comprendre qu'il n'y a à utiliser encode/decode que quand on
passe d'un monde à l'autre, et qu'une interface bien faite place ce
changement au bord du programme. Si on est en train d'implémenter
l'interface, il est clair qu'il faut s'en soucier. Mais si on utilise une
interface déjà faite, et bien conçue, il n'y a rien à faire. En l'occurence,
XML::LibXML fait bien les choses.
Pourquoi est-ce plus logique qu'une seule fois sur l'intégralité, après
concaténation ?
Ca doit être l'heure, mais je ne suis de nouveau plus sûr de comprendre.
La chaîne d'octets que je reçois du réseau, est parsée par
XML::LibXML (je lui donne ce que j'ai reçu tel quel donc, sans encode()
ou decode()), après les différents éléments de mon document (valeurs
des noeuds, et attributs qui m'intéressent), auxquels j'accède donc via
l'API DOM de XML::LibXML, je peux les retourner tel quel à l'appelant ou
il me faut un decode() ? C'est probablement le «fonctions de sortie»
plus haut que je ne suis pas sûr de bien saisir.
Pourquoi est-ce plus logique qu'une seule fois sur l'intégralité, après
concaténation ?
Ca doit être l'heure, mais je ne suis de nouveau plus sûr de comprendre.
La chaîne d'octets que je reçois du réseau, est parsée par
XML::LibXML (je lui donne ce que j'ai reçu tel quel donc, sans encode()
ou decode()), après les différents éléments de mon document (valeurs
des noeuds, et attributs qui m'intéressent), auxquels j'accède donc via
l'API DOM de XML::LibXML, je peux les retourner tel quel à l'appelant ou
il me faut un decode() ? C'est probablement le «fonctions de sortie»
plus haut que je ne suis pas sûr de bien saisir.
Pourquoi est-ce plus logique qu'une seule fois sur l'intégralité, après
concaténation ?
Ca doit être l'heure, mais je ne suis de nouveau plus sûr de comprendre.
La chaîne d'octets que je reçois du réseau, est parsée par
XML::LibXML (je lui donne ce que j'ai reçu tel quel donc, sans encode()
ou decode()), après les différents éléments de mon document (valeurs
des noeuds, et attributs qui m'intéressent), auxquels j'accède donc via
l'API DOM de XML::LibXML, je peux les retourner tel quel à l'appelant ou
il me faut un decode() ? C'est probablement le «fonctions de sortie»
plus haut que je ne suis pas sûr de bien saisir.
S'agissant de XML::LibXML, je viens de mener quelques tests, et elle se
comporte comme je l'apprécie :
- les fonctions de manipulation de l'arbre XML prennent ou renvoient des
chaînes de caractères Unicode ;
- ses fonctions de sortie utilisent des chaînes d'octets.
Il faut bien comprendre qu'il n'y a à utiliser encode/decode que quand on
passe d'un monde à l'autre, et qu'une interface bien faite place ce
changement au bord du programme. Si on est en train d'implémenter
l'interface, il est clair qu'il faut s'en soucier. Mais si on utilise une
interface déjà faite, et bien conçue, il n'y a rien à faire. En l'occurence,
XML::LibXML fait bien les choses.
S'agissant de XML::LibXML, je viens de mener quelques tests, et elle se
comporte comme je l'apprécie :
- les fonctions de manipulation de l'arbre XML prennent ou renvoient des
chaînes de caractères Unicode ;
- ses fonctions de sortie utilisent des chaînes d'octets.
Il faut bien comprendre qu'il n'y a à utiliser encode/decode que quand on
passe d'un monde à l'autre, et qu'une interface bien faite place ce
changement au bord du programme. Si on est en train d'implémenter
l'interface, il est clair qu'il faut s'en soucier. Mais si on utilise une
interface déjà faite, et bien conçue, il n'y a rien à faire. En l'occurence,
XML::LibXML fait bien les choses.
S'agissant de XML::LibXML, je viens de mener quelques tests, et elle se
comporte comme je l'apprécie :
- les fonctions de manipulation de l'arbre XML prennent ou renvoient des
chaînes de caractères Unicode ;
- ses fonctions de sortie utilisent des chaînes d'octets.
Il faut bien comprendre qu'il n'y a à utiliser encode/decode que quand on
passe d'un monde à l'autre, et qu'une interface bien faite place ce
changement au bord du programme. Si on est en train d'implémenter
l'interface, il est clair qu'il faut s'en soucier. Mais si on utilise une
interface déjà faite, et bien conçue, il n'y a rien à faire. En l'occurence,
XML::LibXML fait bien les choses.
Donc votre première remarque concernant XML::LibXML (les fonctions de
manipulation de l'arbre XML prennent ou renvoient des chaînes de
caractères Unicode) me semble très limitative. Comment insérer des
données binaires dans mon arbre XML si je ne peux passer que de
l'Unicode à XML::LibXML ?
Donc votre première remarque concernant XML::LibXML (les fonctions de
manipulation de l'arbre XML prennent ou renvoient des chaînes de
caractères Unicode) me semble très limitative. Comment insérer des
données binaires dans mon arbre XML si je ne peux passer que de
l'Unicode à XML::LibXML ?
Donc votre première remarque concernant XML::LibXML (les fonctions de
manipulation de l'arbre XML prennent ou renvoient des chaînes de
caractères Unicode) me semble très limitative. Comment insérer des
données binaires dans mon arbre XML si je ne peux passer que de
l'Unicode à XML::LibXML ?
Et donc pour répondre au PO, de mon point de vue, dans votre module,
il vous faut distinguer les méthodes/fonctions manipulant du texte et
celles manipulant des données. Ça doit être clair tant dans votre code
que dans la doc... Celles qui manipulent du texte doivent l'émettre ou
le recevoir en utf-8
Les autres ne doivent pas toucher au contenu (et reçoivent ou
émettent donc des chaînes d'octets).
Et donc pour répondre au PO, de mon point de vue, dans votre module,
il vous faut distinguer les méthodes/fonctions manipulant du texte et
celles manipulant des données. Ça doit être clair tant dans votre code
que dans la doc... Celles qui manipulent du texte doivent l'émettre ou
le recevoir en utf-8
Les autres ne doivent pas toucher au contenu (et reçoivent ou
émettent donc des chaînes d'octets).
Et donc pour répondre au PO, de mon point de vue, dans votre module,
il vous faut distinguer les méthodes/fonctions manipulant du texte et
celles manipulant des données. Ça doit être clair tant dans votre code
que dans la doc... Celles qui manipulent du texte doivent l'émettre ou
le recevoir en utf-8
Les autres ne doivent pas toucher au contenu (et reçoivent ou
émettent donc des chaînes d'octets).