Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Je suis avec une ancienne version de PB qui ne gère pas les wchar.
J'interroge un server HTTP qui me renvoie du texte en Français avec des caractère UTF-8.
Vous avez des idées pour faire la conversion iso-8859-1 simplement dans les string pb9 ?
Hors ligne
Salut,
si tu récupères correctement le texte utf-8 dans un fichier tu peux utiliser iconv en ligne de commande https://superuser.com/a/69197
> iconv -f UTF-8 -t ISO-8859-1 filename.txt
si tu peux le récupérer dans un blob, il y a peut-être moyen de passer par les API windows: MultiByteToWideChar, mais j'suis pas certain que ca le fasse.
tu pourrais aussi porter cette fonction C en Powerscript : https://stackoverflow.com/a/11173493
il y aurait aussi une solution payante via un activeX : https://www.example-code.com/powerbuild … o_ansi.asp
Bon encodage
Hors ligne
Merci, en fait je ne suis même pas sur que je récupère vraiment du l'UTF8 dans tous les cas.
Je suis tombé sur une table de correspondance : https://www.utf8-chartable.de/
et mon charset de destination est celui de PB.
// convertie une chaine de caratere sur un octet mais contenant des suites de car utf8 sur deux octet en un caratere iso-8859-1 long ll_len long i, i2 ll_len = len(p_str) if ll_len > 20000 - 1 then return "Erreur f_str_utf8_to_iso88591 chaine en entree trop grande" char t[20000] string s char c char c2 i = 1 // indice sur chaine a lire i2 = 1 // indice sur chaine a écrire DO WHILE i <= ll_len c = mid(p_str, i,1) choose case asc(c) case 0 TO 127 t[i2] = c case 194 // 0xC2 i++ c2 = mid(p_str, i,1) t[i2] = c2 case 195 // 0xC3 i++ c2 = mid(p_str, i,1) t[i2] = char(asc(c2)+64) case 189 i++ c2 = mid(p_str, i,1) t[i2] = "*" case 191 i++ c2 = mid(p_str, i,1) t[i2] = "+" case 239 i++ c2 = mid(p_str, i,1) t[i2] = "#" case else messagebox("f_str_utf8_to_iso", "la valeur de asc(c)!"+string(asc(c))) end choose i++ i2++ LOOP return string(t)
Dernière modification par FlorentP (15-09-2024 13:21:56)
Hors ligne