Bonjour,
Je poste sur ce forum le début de ma conversation avec Fadace, ayant un problème de conversion de caractères que je ne parviens pas à résoudre malgré les explications du tutoriel.
Voici le contexte :
- J'ai un serveur Win 2k avec easyphp 1.8, un site en php et un client oracle, dont le charset en base de registre est FRENCH_FRANCE.WE8MSWIN1252
- J'ai une base de données oracle sous linux, qui est installée en AMERICAN_AMERICA.WE8ISO8859P1
=> quand je saisie certains caractères spéciaux (genre euro, le caractère 3pts de word "…", le "œ", etc.) ceux-ci sont stockés dans la base sous forme de "¿" (#0191) au lieu de #164 pour l'euro (qu'il ne sait pas interpréter en WE8ISO8859P1, mais qu'il peut si j'ai bien compris restituer quand php l'interroge). Or lorsque je les récupères (toujours en php), ils apparaissent tous sous la forme de points d'interrogations inversés...
Application et base ont été changés de serveur et je n'ai plus accès aux précédents, sur lesquels la conversion fonctionnait bien. Il doit donc y avoir un réglage à faire sur le système ou le fichier de configuration d'apache/php, mais impossible pour moi de trouver lequel..
Quand je fais un getenv() du NLS avec php, j'obtiens bien WE8MSWIN1252, donc celui du serveur, qui est en théorie transmis à oracle pour qu'il fasse la conversion avec son charset à lui.
Infos complémentaires :
La base est sous linux 2.6.8, distribution debian 3.1 (sarge).
La variable shell "LANG" du compte système oracle utilisé pour faire tourner Oracle est positionnée à "POSIX".
En interne, la variable Oracle nsl_language est positionnée à AMERICAN.
Merci d'avance pour toute suggestion
(et n'hésitez pas à y aller en explications, car les jeux de caractères est domaine dans lequel je ne connais vraiment pas grand chose)
Partager