* Bonjour, *
comment ecrire dans la base de donnée en arabe dans postgresql 8.4 ?
* Merci *
* Bonjour, *
comment ecrire dans la base de donnée en arabe dans postgresql 8.4 ?
* Merci *
PostgreSQL supporte de base l'Unicode avec encodage UTF8 qui comprend toutes les langues et alphabets. Il n'y a rien de spécial à activer.
Comment passer ce type de requêtes (codées en Unicode) en utilisant libpq ?
Merci d'avance.
Les fonctions de libpq transmettent les requêtes au serveur et reçoivent les résultats sans encoder ni décoder, donc elles ne sont pas vraiment concernées par l'encodage. C'est-à-dire elles sont "transparentes" par rapport à l'encodage, c'est à l'appelant de s'en occuper.
Mon soucis réside dans le fait que les chaines de caractères sont stockées en char (qui permettent de stocker une informations au format ANSI) dans les structures et fonctions utilisées par libpq.
Que faut-il donc faire pour passer de l'Unicode (type wchar_t) ?
A propos d'Unicode, il faut faire le distinguo entre le jeu de caractères (Unicode) et l'encodage qui peut être utf8, utf16 ou ucs-2, utf32 ou ucs-4, et pour les deux derniers avec deux variantes: avec les octets dans l'ordre little endian ou dans l'ordre big endian.
wchar_t, c'est de l'Unicode dans un encodage qui peut être un de ceux ci-dessus, mais on ne sait pas lequel, ça dépend du compilateur. Par comparaison, c'est un peu comme la taille d'un entier qui peut être 16 (vieux systèmes) ou 32 ou 64 bits, voire plus.
Bref il n'y a pas une manière simple et portable de convertir les chaines caractères typées en wchar_t en suite d'octets UTF8.
Sous Windows on va avoir tendance à utiliser WideCharToMultiByte(), sous Unix peut-être iconv avec WCHAR_T comme type source, ou des routines faites soi-même à base de librairie standard C++ comme on peut trouver ici:
http://pileborg.org/blog5.php/2010/0...-8-and-wchar_t
Personnellement, j'utilise Qt qui lit et écrit de l'utf8 de manière simple et qui est portable, ça peut aussi être une solution, ça dépend du projet.
Partager