Encodage de caractères et xml

Le
VenerZen
Hello,

Je me suis remis à c++ assez récemment tout simplement parce que ça m=
e
plait et que ça répond pleinement à mes besoins, cependant j'ai un
soucis et je ne sais pas comment faire.

En fait je voudrais extraire d'une base de données sql serveur un
ensemble de textes et générer des fichiers xml. Mon problème est ici.
La base de données est un windows-cp-1252 et les xml en utf8,
iso-8859-15, etc… en somme dans un type de codage de caractères
différent.

Comment vous vous y prenez pour effectuer les conversions ? je n'ai
pas trouvé comment faire, hormis tenter de jouer avec le «setlocale».
Est-ce qu'il y a une autre manière de faire ? Je n'ai pas encore
commencer le développement, je ne fais qu'y réfléchir pour l'instant.

Merci pour vos remarques.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #20418651
VenerZen wrote:
Comment vous vous y prenez pour effectuer les conversions ? je n'ai
pas trouvé comment faire, hormis tenter de jouer avec le «setlocale».
Est-ce qu'il y a une autre manière de faire ? Je n'ai pas encore
commencer le développement, je ne fais qu'y réfléchir pour l'instant.


Le standard, ma connaissance, n'a pas de notion d'UTF-8. Il faut donc
utiliser une bibliothèque externe, telle que ICU.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Fabien LE LEZ
Le #20418671
On Sat, 24 Oct 2009 04:19:29 -0700 (PDT), VenerZen

base de données sql serveur



Je ne connais pas ce système (à moins que tu ne parles de MS SQL
Server ?), mais je suppose qu'il implémente SQL.

La base de données est un windows-cp-1252



Le codage interne d'une base de données, on s'en fout. L'important,
c'est l'encodage des requêtes SQL et de leurs réponses.

Si tu as besoin de UTF-8, demande donc à ton serveur de parler en
UTF-8. Ça facilite énormément les choses, puisque tu n'as pas de
conversion à faire.
Pour MySQL, il suffit d'envoyer la requête suivante :
SET NAMES 'utf8';
James Kanze
Le #20419901
On Oct 24, 12:19 pm, VenerZen
En fait je voudrais extraire d'une base de données sql serveur
un ensemble de textes et générer des fichiers xml. Mon
problème est ici. La base de données est un windows-cp-1252
et les xml en utf8, iso-8859-15, etc… en somme dans un type de
codage de caractères différent.



Comment vous vous y prenez pour effectuer les conversions ? je
n'ai pas trouvé comment faire, hormis tenter de jouer avec le
«setlocale». Est-ce qu'il y a une autre manière de faire ? Je
n'ai pas encore commencer le développement, je ne fais qu'y
réfléchir pour l'instant.



S'il y a un locale qui convient, tu peux en principe l'utiliser
le codecvt facet ; si tu es en train de lire ou d'écrire avec
les iostream, tu pourrais l'imbuer dans le flux, et la
conversion se fera automatiquement. La façon classique ici, ce
serait d'utiliser les wiostream et wchar_t en interne.

Une autre possibilité, si tu n'arrives pas à trouver le bon
locale, serait d'utiliser une bibliothèque externe, comme iconv.

Enfin, si l'encodage d'entrée est single byte (c-à-d que chaque
encodage n'occupe qu'un seul octet), le plus simple, souvent,
c'est simplement un tableau de char const* const [256], avec le
caractère source (converti en unsigned char) comme indice.
L'initialisation de ce tableau est un peu fastidieux, avec plein
des entrées du genre "xC2xA9", mais c'est ça t'embête, ce
n'est pas trop difficile d'écrire un programme pour le générer,
à partir d'un format plus convivial.

--
James Kanze
VenerZen
Le #20425591
On 25 oct, 02:55, Mickaël Wolff
VenerZen wrote:
> Comment vous vous y prenez pour effectuer les conversions ? je n'ai
> pas trouvé comment faire, hormis tenter de jouer avec le «setlocale ».
> Est-ce qu'il y a une autre manière de faire ? Je n'ai pas encore
> commencer le développement, je ne fais qu'y réfléchir pour l'inst ant.

   Le standard, ma connaissance, n'a pas de notion d'UTF-8. Il faut d onc
utiliser une bibliothèque externe, telle que ICU.

--
Mickaël Wolff aka Lupus Michaelishttp://lupusmic.org



Ok, j'avais vu passer ça en installant boost et je me demandais
justement à quoi ça correspondait.

Merci.
VenerZen
Le #20425841
On 25 oct, 03:21, Fabien LE LEZ
On Sat, 24 Oct 2009 04:19:29 -0700 (PDT), VenerZen

>base de données sql serveur

Je ne connais pas ce système (à moins que tu ne parles de MS SQL
Server ?), mais je suppose qu'il implémente SQL.

>La base de données est un windows-cp-1252

Le codage interne d'une base de données, on s'en fout. L'important,
c'est l'encodage des requêtes SQL et de leurs réponses.

Si tu as besoin de UTF-8, demande donc à ton serveur de parler en
UTF-8. Ça facilite énormément les choses, puisque tu n'as pas de
conversion à faire.
Pour MySQL, il suffit d'envoyer la requête suivante :
        SET NAMES 'utf8';



Oui c'est MS Sql Server en version 2005 je crois. Je comptais m'y
connecter à partir d'un serveur FreeBSD via TDS.

Je ne sais pas s'il existe cette possibilité avec ce sgbdr. Je note ça
également. Merci.
VenerZen
Le #20425991
On 25 oct, 11:16, James Kanze
On Oct 24, 12:19 pm, VenerZen
> En fait je voudrais extraire d'une base de données sql serveur
> un ensemble de textes et générer des fichiers xml. Mon
> problème est ici.  La base de données est un windows-cp-1252
> et les xml en utf8, iso-8859-15, etc… en somme dans un type de
> codage de caractères différent.
> Comment vous vous y prenez pour effectuer les conversions ? je
> n'ai pas trouvé comment faire, hormis tenter de jouer avec le
> «setlocale».  Est-ce qu'il y a une autre manière de faire ? Je
> n'ai pas encore commencer le développement, je ne fais qu'y
> réfléchir pour l'instant.

S'il y a un locale qui convient, tu peux en principe l'utiliser
le codecvt facet ; si tu es en train de lire ou d'écrire avec
les iostream, tu pourrais l'imbuer dans le flux, et la
conversion se fera automatiquement. La façon classique ici, ce
serait d'utiliser les wiostream et wchar_t en interne.

Une autre possibilité, si tu n'arrives pas à trouver le bon
locale, serait d'utiliser une bibliothèque externe, comme iconv.

Enfin, si l'encodage d'entrée est single byte (c-à-d que chaque
encodage n'occupe qu'un seul octet), le plus simple, souvent,
c'est simplement un tableau de char const* const  [256], avec le
caractère source (converti en unsigned char) comme indice.
L'initialisation de ce tableau est un peu fastidieux, avec plein
des entrées du genre "xC2xA9", mais c'est ça t'embête, ce
n'est pas trop difficile d'écrire un programme pour le générer,
à partir d'un format plus convivial.

--
James Kanze



Je crois que j'ai encore un paquet de documentation à lire. Ça m'a
l'air complexe comme sujet. Merci.
Olivier Miakinen
Le #20425981
Le 26/10/2009 11:17, VenerZen a écrit :

Je crois que j'ai encore un paquet de documentation à lire. Ça m'a
l'air complexe comme sujet. Merci.



Commence quand même par vérifier l'hypothèse de Fabien LE LEZ : il y a
toutes les chances que sa méthode fonctionne, et c'est bien sûr la plus
simple.
VenerZen
Le #20427101
On 26 oct, 11:21, Olivier Miakinen
Le 26/10/2009 11:17, VenerZen a écrit :



> Je crois que j'ai encore un paquet de documentation à lire. Ça m'a
> l'air complexe comme sujet. Merci.

Commence quand même par vérifier l'hypothèse de Fabien LE LEZ : il y a
toutes les chances que sa méthode fonctionne, et c'est bien sûr la pl us
simple.



Oui, je n'y avais pas pensé. J'ai un premier projet a terminer et je
vais m'attaquer à celui-ci courant novembre.
Je fais ça surtout pour me remettre à niveau en c++, donc je n'ai pas
vraiment de contrainte.
Publicité
Poster une réponse
Anonyme