Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour,
Dans la série je fais joujou avec ma nouvelle caisse enregistreuse, après l'épisode "comment j'ouvre le tiroir ?", voici la suite logique "comment se fait-il que mes accents soient perdus ?".
En fait, je lis les articles dans une base de données ASA 8 avec le jeu de caractère CP 850, et lorsque je les affiche à l'écran windows, pas de pb. Le soucis apparait quand je les affiches sur l'afficheur client LCD, je perds les accents, le sigle €, et plein de subtilités ... "Café" devient "Cafù" ... c'est assez moyen ...
Le sigle €, ce n'est pas trop grave, on survit sans.
Le problème c'est le reste. J'avais trouvé une API (CharToOem) de la DLL User32.dll qui convertit bien, mais une fois de temps en temps, elle me provoque une erreur de protection générale ... notamment lors des saisies rapides. Mais sur une caisse tactile, on saisit rapidement ... alors fatalement ...
Donc ma question est : connaissez-vous une autre API ou une autre DLL qui permettrait de palier à ce manque ? (ou alors, il y a une fonction de PB que j'ai oublié ...)
Ou alors il y a une méthode particulière pour se servir de cette DLL ?
Merci de votre aide !
Hors ligne
CharToOemA (tu as raison de me reprendre ... CharToOem c'est l'alias dans mon appli) ...
Hors ligne
je sais qu'avec oracle il faut ajouter " DisableUnicode=1 "
Hors ligne
apparemment, il y a aussi CharToOemW... ce n'est pas documenté... kaori...
Hors ligne
et il y a aussi WideCharToMultiByte
hs: moi aussi j'ai toute la collection... ainsi que la suite...
Hors ligne
Use ToUnicode() to convert your ANSI string to UTF-16, then use
WideCharToMultiByte (WinAPI) to convert from UTF-16 to UTF-8 (CP_UTF8 code
page), as follows:Code: pb
//external func function long WideCharToMultiByte(ulong CodePage, ulong dwFlags, ref blob lpWideCharStr, long cchWideChar, ref blob lpMultiByteStr, long cchMultiByte, long lpDefaultChar, long lpUsedDefaultChar) LIBRARY "kernel32.dll" // script Blob lbb_tmp, lbb_utf8 lbb_tmp = ToUnicode(ls_data) ll_retbytes = WideCharToMultiBytePrep(65001, 0, lbb_tmp, Len(lbb_tmp)/2, lbb_utf8, 0, 0, 0) lbb_utf8 = Blob(Space(ll_retbytes)) WideCharToMultiBytePrep(65001, 0, lbb_tmp, Len(lbb_tmp)/2, lbb_utf8, ll_retbytes, 0, 0) //then write utf8 blob to file using FileWrite, optionally prepending it with UTF-8 3-byte marker ("~hEF~hBB~hBF")
Bye
Hors ligne
Je vais essayer ça, je vous tiens au courant (je ne doute pas que ça fonctionne, mais il faut que les différents appels ne se téléscopent pas lors des saisies rapides).
Merci au vilain canard !
Hors ligne
Ca a marché?
Hors ligne
Ryo a écrit:
...J'avais trouvé une API (CharToOem) de la DLL User32.dll qui convertit bien, mais une fois de temps en temps, elle me provoque une erreur de protection générale ... notamment lors des saisies rapides.
Si tu nous donnait ton code, ça serait plus facile à corriger.
Autrement dit, ça m'étonnerait que user32.dll soit buggée.
De plus, quelle version de PB utilise tu ?
Hors ligne
Pages: 1