|
| erreurs d'encodage UTF-8 dans Hyperfile via ODBC |
| Iniciado por eric.messeant, 01,sep. 2014 17:27 - 10 respuestas |
| |
| | | |
|
| |
Miembro registrado 16 mensajes |
|
| Publicado el 01,septiembre 2014 - 17:27 |
Bonjour
J'ai créer un job java qui doit me remplir une base Hyperfile via ODBC.
Le problème est que j'ai des erreurs d'encodage UTF-8 dans la base de données.
Par exemple la valeur 'Indéterminé' sera stocké 'IndéterminÃ' dans la base de données
J'ai bien vérifié que la colonne qui reçoit cette valeur dans la base hyperfile est bien en Unicode.
Avez vous une idée pour résoudre cette erreur avec ODBC.
Cdlt
Eric |
| |
| |
| | | |
|
| | |
| |
| Publicado el 01,septiembre 2014 - 20:49 |
Bonjour Eric
> Avez vous une idée pour résoudre cette erreur avec ODBC.
Oui... voila l'idée : nous montrer le code histoire qu'on ait une chance de savoir ou est l'erreur
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
NOUVEAU: WXShowroom.com est disponible : Montrez vos projets ! Plus d'information sur http://fabriceharari.com
Cdlt
Eric
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 16 mensajes |
|
| Publicado el 02,septiembre 2014 - 09:04 |
Bonjour Fabrice
Le job JAVA a été généré avec TALEND ( un ETL) donc je ne maitrise pas à 100% le code java généré et c'est souvent très verbeux et je ne pense pas que cela passerait bien sur le forum.
Pour corriger l'erreur, je m'attendais à des paramètres supplémentaires à passer au niveau de la connexion ODBC pour indiqué l'encodage comme j'ai pu voir pour les connexion OLEDB sur la doc PCSOFT mais je n'ai pas vu de paramètre de ce genre dans la doc pour ODBC.
Mais si tu préfères, je veux bien essayer de faire un job plus élémentaire mais je pense que cela sera aussi très verbeux.
Ou alors si il existe une autre solution en JAVA que ODBC pour se connecter à une base Hyperfile, je suis preneur.
@+
Eric |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 512 mensajes |
|
| Publicado el 02,septiembre 2014 - 11:15 |
Bonjour à tous,
ODN a écrit :
J'ai créer un job java qui doit me remplir une base Hyperfile via ODBC.
Le problème est que j'ai des erreurs d'encodage UTF-8 dans la base de données.
Par exemple la valeur 'Indéterminé' sera stocké 'IndéterminÃ' dans la base de données
J'ai bien vérifié que la colonne qui reçoit cette valeur dans la base hyperfile est bien en Unicode.
Avez vous une idée pour résoudre cette erreur avec ODBC.
Pour commencer… • En WLangage, le type de données Chaîne UNICODE est basé sur UCS-2, soit chaque caractère codé sur 2 octets. • Dans HyperFile le type de données "Texte Unicode" est très certainement basé sur UCS-2. • Quant à UTF-8, le codage des caractères est effectué sous forme de séquences de 1 ou 2 octets, selon le caractère.
Ni HyperFile, ni le WLangage ne gèrent nativement l'encodage UTF-8. Mais des fonctions WLangage permettent d'effectuer des conversions entre UCS-2 (ou ANSI) et un texte encodé avec UTF-8.
Il est possible d'écrire du texte encodé UTF-8 dans une rubrique Texte ANSI ou Texte UNICODE, mais au lieu d'analyser la séquence d'octets, chaque octet est interprété isolément, chacun étant vu comme un simple caractère. C'est ton programme qui doit explicitement réinterprété le texte de la rubrique en UCS-2 (ou ANSI) avant de l'afficher.
Cf. les fonctions UTF8VersUnicode(), UTF8VersAnsi() et UTF8VersChaîne().
Pour revenir à ton cas… Lorsque ton job accède en écriture à la BD HyperFile, il est probable que la chaîne UTF-8 est considérée (à tort) comme une chaîne ANSI, puis stockée dans la BD en fonction du type de la rubrique texte (ANSI ou UCS-2).
Peux-tu agir sur l'encodage pour forcer UCS-2 ?
Sinon, si tu es en HyperFile C/S, tu peux envisager de "corriger" les données à la volée, via un trigger serveur.
Sinon, tu peux convenir que la rubrique texte est encodée en UTF-8 que tes programmes devront interpréter correctement. Dans ce cas, tu peux te contenter d'une rubrique texte ANSI. Mais c'est vrai que pour l'administrateur des données, ce sera difficile à lire.
Bon courage. 
-- Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/… |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 512 mensajes |
|
| Publicado el 02,septiembre 2014 - 13:38 |
=JBO= a écrit :
Peux-tu agir sur l'encodage pour forcer UCS-2 ?
Pour information, UCS-2 est englobé dans UTF-16. UCS-2 est équivalent à UTF-16LE, mais avec une limitation de 1 mot par caractère (soit 2 octets).
Donc, si tu ne trouves pas UCS-2 dans les propositions d'encodage, à la place tu peux choisir UTF-16.

-- Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/… |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 16 mensajes |
|
| Publicado el 02,septiembre 2014 - 16:01 |
Bonjour =JBO=
Merci pour ces informations.
Je vais essayer de faire la conversion au niveau de java.
Je vous tiens au courant si j'arrive à trouver comment faire la conversion.
@+
Eric |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 16 mensajes |
|
| Publicado el 03,septiembre 2014 - 09:08 |
Bonjour
J'ai fait des tests de conversion de la chaine java en UTF-16LE ( et bien d'autres formats avec lesquels je me suis retrouvé sur java avec des caractère japonais ), mais quand cela est inséré dans la base Hyperfile, j'ai vraiment l'impression que l'ODBC interprète la chaine de caractère java comme de l'ANSI.
J'ai aussi essayé de convertir le chaine en US-ASCII mais cela n'est pas mieux car je me retrouve avec des '?' à la place des accents.
J'ai encore cherché sur les doc de pcsoft pour voir s'il n'y a pas un paramètre pour forcer l'encoding mais je n'ai pas trouvé. (apparemment cela semble faisable pour d'autre driver ODBC)
@+
Eric |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 16 mensajes |
|
| Publicado el 03,septiembre 2014 - 10:37 |
Re bonjour
J'ai continué mes investigations et en regardant dans le centre de contrôle HyperFileSQL, en sélectionnant le fichier concerné puis sélectionné l'onglet "Propriétés", j'ai les propriétés suivante :
Format du fichier : Format Ansi Alphabet : Caractères romains à la norme ANSI Informations étendues de connexion : CRYPTAGE=RC5_16;FORCE_ANSI
Je pense donc que mon problème viens de là.
Par contre, je ne vois pas où je peux modifier ces valeurs sur le fichier que cela soit de l'analyse ou du centre de contrôle HyperFileSQL.
@+
Eric |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2 mensajes |
|
| Publicado el 27,enero 2016 - 14:35 |
@Eric As-tu réussi à trouver une solution ? Je suis sur le même genre de problème, connexion ODBC à HFSQL avec PHP. Les accents ne passent pas... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,abril 2016 - 11:17 |
Avez-vous trouvé la solution concernant des caractères accentués et essais d'écrire vers Hyperfile par ODBC ? Moi, je récupéré les données (notamment, les chaines de caractères) de Hyperfile par biais de PHP 7 et provider OLE DB et ensuite je essai de les écrire vers la base MySQL. Les requêtes sql qui ne contiennent pas des lettres accentués (é, è, à, û ou ç, ......) passent correctement. Les requêtes avec (é, è, à, ç, Ü, .....) ne passent pas du tout. Les enregistrement avec ces accentués ne s'écrit pas dans MySQL. Avez-vous des idées ? Merci d'avance. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 07,febrero 2019 - 11:00 |
Bonjour,
Pour ma part, je passe en PHP par utf8_encode en lecture et utf8_decode en écriture. Si cela peut aider...
BC |
| |
| |
| | | |
|
| | | | |
| | |
|