OVH Cloud OVH Cloud

jdbc

1 réponse
Avatar
ali k
Bonjour,
J'ai fait un petit prog pour tester ma connexion à postgresql via jdbc.
Je fait un simple select et je renvoie le résultat sur la sortie.
ça marche jusqu'à ce qu'il rencontre un caractère accentué.
voila ce qu'il me sort alors :

Invalid character data was found. This is most likely caused by stored
data containing characters that are invalid for the character set the
database was created in. The most common example of this is storing
8bit data in a SQL_ASCII database.

j'ai pourtant paramétré mon postgresql de manière à ce qu'il accepte le
jeu de caractère iso-8859-1.

Quelqu'un a t'il une idée ?

D'avance merci pour vos réponses.

1 réponse

Avatar
jz
ali k wrote:
...
j'ai pourtant paramétré mon postgresql de manière à ce qu'il accepte le
jeu de caractère iso-8859-1.
...


Java ne cause pas iso-8859-1, mais utf-8 (chez nous, car en vrai cela
dépend de la configuration locale).

Solution 1 : c'est toujours l'appli Java qui lit ou écrit dans la base.
Ca marche tout seul sans s'occuper de l'encodage.

Solution 2 : si la base est partagée avec des applis dont l'encodage des
chaîne est fixe, il faut lire les chaînes en binaire puis les convertir.

En lecture, c'est un truc du genre :

ResultSet res;
String str;
byte b[] = new byte[10000];
...
... // soumission de la requête
...
InputStream stream = res.getBinaryStream(i);
if (stream != null) {
int sz = stream.read(b);
if (sz>0)
str = new String(b, 0, sz, "ISO-8859-1");
}

C'est vraiment balourd.

<cafaitdubienderaler>
Ce qui manque vraiment c'est un paramètre encodage à la méthode
getString de ResultSet.
</cafaitdubienderaler>

A+
Jacques