Bonjour,
J'ai des anciennes applications (Delphi et C++) qui communiquent avec une BDD Oracle.
La BDD est paramétré depuis très longtemps comme ceci :
Il y a 20/25 ans, l'unicode n'existait pasNLS_CHARACTERSET = WE8MSWIN1252
Les applications fonctionnent à l'international, soit :
- Le français
- L'anglais
- Le chinois simplifié
- Le russe
...
Les chaines sont toutes stockées dans des VARCHAR2(...)
Comme toutes les chaines sont stockées en caractères LATIN (CodePage 1252), un
charset (jeu de caractère) est appliqué dans l'application : PAS DE PROBLEME avec Delphi 6 ou C++
Pour vous donner une idée :
Insérer du russe dans Word (unicode) : рождество
Enregistrer le fichier en texte brut puis sélectionner le codage Cyrillique (Windows)
=> Ce qui est enregistré dans le fichier, c'est ce qui est enregistré dans le VARCHAR2 de la BDD : ðîæäåñòâî
AUCUN PROBLEME avec Delphi ou C++.
Pour les versions plus récentes de Delphi ou C++ qui gère maintenant l'unicode, ce n'est pas un charset qui
est appliqué mais un encodage / décodage des chaines.
--------------------------------------------------------------------------------------------Encoding encLatin = Encoding.GetEncoding(1252); //latin
Encoding encRusse = Encoding.GetEncoding(1251); //cyrilique
chaineCible = new string(encRusse.GetChars(encLatin.GetBytes(chaineSource)));
//chaineCible = unicode : ok
Aujourd'hui, je dois créer une PL/SQL qui extrait une chaine VARCHAR2 qui contient du russe.
Puis enregistrer la chaine dans un fichier, en UNICODE.
Comment effectuer l'encodage / décodage en PL/SQL ?
J'ai cherché du côté de la fonction CONVERT mais ça ne fait pas ce que je souhaite.
C'est à dire transformer la chaine latin (russe) ðîæäåñòâî en unicode рождество
Partager