Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1895 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JDBC, SQL Serveur et Unicode

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JDBC, SQL Serveur et Unicode

n°891403
El_gringo
Posté le 05-11-2004 à 16:59:16  profilanswer
 

Je suis en train de mettre en place un système de traduction d'une appli web écrite en Java (Servlet / JSP).
base de donnée qui fait les correspondances suivantes :
ID Message + ID Langage => Libellé
Avec les langues qui ont un alphabet latin, tout roule.
Par contre, quand on veut traduire en Hébreux, Arménien, Japonais, etc... ça pose problème.
La colone de libellé est de type nvarchar (contient donc de l'Unicode, ce qui permet d'y mettre aussi bien des caractères latins que des caractères hébreux, japonais ou autre, sans se soucier du charset).
Le problème, c'est que, quand je tente de récupérer la valeur de ce champ, s'il contient des caractères latin, ça roule. Par contre, si j'y écrit des caractères hébreux ou autre, quand j'appelle le getString sur la colone concernée, je ne récupère que des ? et de espaces. Idem, si je récupère un tableau de byte, il contient les codes ascii de ? et d'espaces.
Des idées ?

mood
Publicité
Posté le 05-11-2004 à 16:59:16  profilanswer
 

n°891929
the real m​oins moins
Posté le 06-11-2004 à 17:33:00  profilanswer
 

quel db/driver?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°891930
the real m​oins moins
Posté le 06-11-2004 à 17:33:28  profilanswer
 

(j'ai eu le probleme avec mysql, et en fait il faut spécifier l'encoding dans l'url de connection qu'on passe au driver jdbc)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°891938
the real m​oins moins
Posté le 06-11-2004 à 17:47:12  profilanswer
 

euh bon, SQLServer, donc...
exemple, avec les drivers altinav:
http://www.atinav.com/products/ave [...] htm#feat17
(euh par contre faudra m'expliquer pourquoi ils veulent mettre des guillemets dans leurs urls, mais bon, passons)
 
autre driver, je sais pas de qui:
http://www.inetsoftware.de/English [...] Converting
 
bref, t'as pigé, va voir les docs de ton driver :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°893401
El_gringo
Posté le 08-11-2004 à 15:57:48  profilanswer
 

Non, mais ce que je voudrais moi, c'est pouvoir stocker aussi bien des caractères chinois, hébreux, arménien, latins, etc, tout ça dans un même champ. Pour ça, nvarchar va m'etre utile.
En fait il permet de s'affranchire de l'encoding habituel, et de tout stocker en unicode.
A mon avis, l'option "encoding" à laquelle tu fais référence correspond à la propriété "charset" de mon driver :
http://jtds.sourceforge.net/faq.html
 
Voila une petite copie du passage qui nous interresse :


charset (default - the character set the server was installed with)
    Very important setting, determines the byte value to character mapping for CHAR/VARCHAR/TEXT values. Applies for characters from the extended set (codes 128-255). For NCHAR/NVARCHAR/NTEXT values doesn't have any effect since these are stored using Unicode.


 
PS : désolé si je dis des conneries, mais je m'y perd un peu dans tout ça, ces histoires d'encodage, d'unicode, UTF-8, et tout ça.

n°893465
the real m​oins moins
Posté le 08-11-2004 à 16:45:11  profilanswer
 

essaie quand meme
et puis niveau client, il faut aussi lui dire quel est ton encodage, pas lui rebalancer tout ds la gueule pour qu'il devine

n°893521
El_gringo
Posté le 08-11-2004 à 17:24:26  profilanswer
 

En fait je crois que j'ai compris.
SQL Server permet de stocker des caractères unicode, à l'aide de l'UCS-2
En Java, les caractères sont codés en unicode aussi, mais suivant la norme UTF-16.
D'ou problème quand j'essaye de stocker des caractères spéciaux depuis mon code Java, dans ma base de données SQL erver. (et pb dans l'autre sens aussi).
Il faudrait que j'arrive à convertir les bytes de ma chaines de char en UCS-2. Problème : la classe Charset n'inclus pas l'interprétation de l'UCS-2 en standard. :-(
 
(extrait de Javadoc : type d'encodages supportés en standard)


US-ASCII   Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set
ISO-8859-1    ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
UTF-8  Eight-bit UCS Transformation Format
UTF-16BE  Sixteen-bit UCS Transformation Format, big-endian byte order
UTF-16LE  Sixteen-bit UCS Transformation Format, little-endian byte order
UTF-16


Message édité par El_gringo le 08-11-2004 à 17:24:35
n°893536
the real m​oins moins
Posté le 08-11-2004 à 17:32:31  profilanswer
 

UCS2? [:mlc]
 
 
tu sais quoi? utilise un bete varchar et utilise le param dont tu me parlais plus haut [:joce]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°893974
El_gringo
Posté le 09-11-2004 à 09:23:24  profilanswer
 

impossible. Avec un bête varchar, je peux pas faire d'unicode, donc pas d'idéogrammes chinois je crois, et en tout cas, je suis sur que je n'pourrais pas mettre ET des idéogrammes chinois ET des caractères hébreux, etc. Avec un varchar, on se limite à un charset particulier.

n°893977
El_gringo
Posté le 09-11-2004 à 09:24:46  profilanswer
 

Brêve description des normes d'unicode :
http://alis.isoc.org/glossaire/unicode.fr.htm

mood
Publicité
Posté le 09-11-2004 à 09:24:46  profilanswer
 

n°894040
the real m​oins moins
Posté le 09-11-2004 à 10:43:09  profilanswer
 

El_gringo a écrit :

impossible. Avec un bête varchar, je peux pas faire d'unicode, donc pas d'idéogrammes chinois je crois, et en tout cas, je suis sur que je n'pourrais pas mettre ET des idéogrammes chinois ET des caractères hébreux, etc. Avec un varchar, on se limite à un charset particulier.

t'as essayé? pq tu pourrais pas encoder de l'unicode dans un varchar? :o

n°894179
El_gringo
Posté le 09-11-2004 à 12:53:06  profilanswer
 

Ben, c'est comme ça, j'y peux rien moi.
CF (voir varchar et nvarchar) :  
http://www.laltruiste.com/document [...] erver.html

n°894188
the real m​oins moins
Posté le 09-11-2004 à 13:00:32  profilanswer
 

je te parle d'encodage, pas des types natifs d'sqlserver.
 
re-t'as essayé ?

n°894193
El_gringo
Posté le 09-11-2004 à 13:03:29  profilanswer
 

J'avoue, j'ai pas essayé...
 
J'vais manger un bout et j'essaye. Je vous (te) tiens au courant.

n°894196
the real m​oins moins
Posté le 09-11-2004 à 13:06:33  profilanswer
 

:D

n°894249
El_gringo
Posté le 09-11-2004 à 14:04:02  profilanswer
 

Un petit post, juste pour dire que j'ai tjs pas essayé du varchar, mais voici sur jguru un problème qui semble être le même que le mien. Sans réponse ! :-(  
http://www.jguru.com/faq/view.jsp?EID=114155


Message édité par El_gringo le 09-11-2004 à 14:04:16
n°894902
El_gringo
Posté le 10-11-2004 à 08:58:56  profilanswer
 

Au fait, j'ai essayé avec du varchar. Le problème est le même. Par contre j'arrive à un meilleur résultat en insérant mes données de cette manière (voir le N avant les données) :

String sql = "insert into D_TRANSLATE VALUES ('test.unicode', 'test.unicode', 'UNI',N'" + unicode + "')";


 
Ce problème est donc résolu. Mais, ho ho, 'faudrait pas que je me croie tiré d'affaire moi ! :-/
 
Voir la suite ici :
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JDBC, SQL Serveur et Unicode

 

Sujets relatifs
l'asp.net, que me faut il comme serveur ?SQL server, VBscript et Access expliquez moi
tester l'existence d'un fichier sur le serveur [résolu]requete SQL sur champ Date
"Cacher" code php ? Autre serveur ?déterminer si un serveur est en ipv4/ipv6
comment changer le jour de debut de semaine sqlrequette SQL
Requete pour lot DTS - SQL SERV 2000Reseau Socket - Problème de bind() dans un client/serveur local
Plus de sujets relatifs à : JDBC, SQL Serveur et Unicode


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR