Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problèmes d'encodage Windows/Linux avec Tomcat/JDBC

4 réponses
Avatar
p0psy
Bonjour,

J'explique un petit peu le sujet de ce mail, j'ai actuellement une
application web (Java 1.5, Tomcat 5.5) qui expose un webservice (Axis
1.3). Ce webservice récupère une String et la compare avec une récupérée
de la base de données (MySQL 4.0, vieux driver org.gjt.mm.mysql, les
champ sont en "latin-1").
Mon appli web est "full UTF-8" et fonctionne bien sous windows. Lorsque
je la lance sur linux, ben ça ne marche plus.

En affichant ce que j'ai comme données, je récupère apparemment la bonne
chaine de carcatères depuis le web, par contre celle lue depuis la base
de données n'as pas l'air valide (caractères accentués remplacés par des
trucs bizarres, typique d'une mauvaise conversion unicode/iso-9959-1)...

Je n'avais pas le problème sur mon application avant (qui tourne en prod
sur du linux), mais elle n'était pas en unicode (mais je ne vois pas le
rapport entre la "présentation" en unicode et l'accès à la base de données).

Si quelqu'un a une idée ou a déjà rencontré le problème, je suis très
preneur :-).

Merci.

4 réponses

Avatar
TestMan
p0psy wrote:
Bonjour,

J'explique un petit peu le sujet de ce mail, j'ai actuellement une
application web (Java 1.5, Tomcat 5.5) qui expose un webservice (Axis
1.3). Ce webservice récupère une String et la compare avec une récupérée
de la base de données (MySQL 4.0, vieux driver org.gjt.mm.mysql, les
champ sont en "latin-1").
Mon appli web est "full UTF-8" et fonctionne bien sous windows. Lorsque
je la lance sur linux, ben ça ne marche plus.

En affichant ce que j'ai comme données, je récupère apparemment la bonne
chaine de carcatères depuis le web, par contre celle lue depuis la base
de données n'as pas l'air valide (caractères accentués remplacés par des
trucs bizarres, typique d'une mauvaise conversion unicode/iso-9959-1)...

Je n'avais pas le problème sur mon application avant (qui tourne en prod
sur du linux), mais elle n'était pas en unicode (mais je ne vois pas le
rapport entre la "présentation" en unicode et l'accès à la base de
données).

Si quelqu'un a une idée ou a déjà rencontré le problème, je suis très
preneur :-).

Merci.


Est-il indiqué clairement quelque part que tes champs sont en Latin1 ?
(Si, non, est-tu essayé de forcer la connexion à identifier les champs
comme latin1 ?)

Perso s'il est possible de passer la base en UTF-8, je te le conseille
car celà évite beaucoup de prises de tête. Quand on commence avec
l'unicode, il vaut mieux tout passer une fois pour tout, celà évite des
surprises ...


A+

TM

Avatar
p0psy
Est-il indiqué clairement quelque part que tes champs sont en Latin1 ?
(Si, non, est-tu essayé de forcer la connexion à identifier les champs
comme latin1 ?)
J'ai essayé avec et sans... je n'ai pas vu la différence.


Perso s'il est possible de passer la base en UTF-8, je te le conseille
car celà évite beaucoup de prises de tête. Quand on commence avec
l'unicode, il vaut mieux tout passer une fois pour tout, celà évite des
surprises ...
Je suis tout à fait d'accord, malheureusement mon application n'est pas

la seule à aller taper dans la base de données et si je change tout en
unicode je vais me faire engueuler ;-).

Bon, après quelques autres test, ça fonctionne sur un de mes serveurs
linux, c'est donc bien lié à la configuration de la machine... Alors je
croyais faire du Java et de ce fait ne pas être "lié" à la machine de la
sorte...
Maintenant il faut que je trouve la différence de configuration entre
mes serveurs, je vais bien m'amuser :-/.

Merci quand même pour la réponse. D'ailleurs si quelqu'un connaît le
paramètre machine susceptible d'agir de la sorte...

Avatar
olivier de SEDE

Est-il indiqué clairement quelque part que tes champs sont en Latin1 ?
(Si, non, est-tu essayé de forcer la connexion à identifier les ch amps
comme latin1 ?)


J'ai essayé avec et sans... je n'ai pas vu la différence.

Perso s'il est possible de passer la base en UTF-8, je te le conseille
car celà évite beaucoup de prises de tête. Quand on commence ave c
l'unicode, il vaut mieux tout passer une fois pour tout, celà évit e
des surprises ...


Je suis tout à fait d'accord, malheureusement mon application n'est p as
la seule à aller taper dans la base de données et si je change tout en
unicode je vais me faire engueuler ;-).

Bon, après quelques autres test, ça fonctionne sur un de mes serveu rs
linux, c'est donc bien lié à la configuration de la machine... Alor s je
croyais faire du Java et de ce fait ne pas être "lié" à la machin e de la
sorte...
Maintenant il faut que je trouve la différence de configuration entre
mes serveurs, je vais bien m'amuser :-/.

Merci quand même pour la réponse. D'ailleurs si quelqu'un connaît le
paramètre machine susceptible d'agir de la sorte...


Bonjour,

Voici une proposition a mettre dans le script de lancement de tomcat:

LC_ALL=fr_FR.ISO8859-1;export LC_ALL

--
Olivier


Avatar
p0psy
Voici une proposition a mettre dans le script de lancement de tomcat:
LC_ALL=fr_FR.ISO8859-1;export LC_ALL
Je cherchais quelque chose dans ce genre, donc là je pensais que ça

allait être bon... mais non :-(.

Sinon j'ai trouvé la solution mais il faut que je regarde plus en
profondeur.
Dans le script de lancement de tomcat, dans les paramètres de la JVM
j'ai rajouté :
-Dfile.encoding=ISO-8859-1

Et ça marche. Le paramètre parle de lui-même, étant sous un linux
j'imagine que l'approximation: socket = fichier est correcte, non ? Et
donc avec ce paramètre l'encodage par défaut d'une socket est ISO-8859-1.

Sinon j'ai essayé avec :
-Dsun.jnu.encoding=ISO-8859-1
Et ça marche aussi, mar contre je n'ai pas trouvé d'info sur ce
paramètre, qu'est-ce que c'est ?

Donc, je continue mes questions (promis c'est la dernière) :
Faut-il mieux utiliser file.encoding ou sun.jnu.encoding ?

Merci encore.