Gérer les caractères accentués avec LiveCode pour SQLite
Ceux-ci sont très bien gérés par LiveCode tant qu'on ne partage pas nos informations. Mais dès que l'on ouvre la base avec un autre produit, nous avons une apparition de caractères cabalistiques. Et inversement si on lit une base déjà saisie avec un autre produit que LiveCode, c'est l'avalanche de symboles
Après une recherche infructueuse sur les forums et le site de LiveCode je me suis décidé à trouver une solution. Après quelques jours de réflexions et d'essais de lecture entre plusieurs systèmes, je vous propose ma solution. Elle permet de coder les caractères accentués avec LiveCode de telles façons qu'ils seront lisibles correctement avec d'autres applications. Inversement, une fonction de décodage permettra d'afficher correctement les chaines avec des caractères accentués.
Après plusieurs essais, je me suis aperçu que les codes de caractères accentués étaient précédés du code ASCII 195. Il restait à trouver un algorithme pour les fonctions de codage et décodage.
Le code pour la fonction codeFrench
function codefrench pChaine
local tchaine,x,tchainenew,tAccent
-- mémorisation de la chaîne à coder
put pchaine into tchaine
-- initialisation de la chaîne codé
put empty into tchainenew
-- on parcourt la chaîne caractère par caractère
repeat with x=1 to the length of tChaine
-- en fonction des caractères accentués on rajoute le code 195
switch char x of tchaine
case "à"
put tchainenew & numtochar(195) & numtochar(160) into tchainenew
break
case "é"
put tchainenew & numtochar(195) & numtochar(169) into tchainenew
break
case "è"
put tchainenew & numtochar(195) & numtochar(168) into tchainenew
break
case "î"
put tchainenew & numtochar(195) & numtochar(174) into tchainenew
break
case "â"
put tchainenew & numtochar(195) & numtochar(162) into tchainenew
break
case "ù"
put tchainenew & numtochar(195) & numtochar(185) into tchainenew
break
case "ê"
put tchainenew & numtochar(195) & numtochar(170) into tchainenew
break
case "ç"
put tchainenew & numtochar(195) & numtochar(167) into tchainenew
break
default
-- gestion normale des caractères
put tchainenew & char x of tchaine into tchainenew
end switch
end repeat
-- on renvoie la chaine décodée
return tchainenew
end codefrench
Le code pour la fonction decodeFrench
function decodefrench pChaine
local tchaine,x,tchainenew,tAccent
-- mémorisation de la chaîne à décoder
put pchaine into tchaine
-- initialisation de la chaîne décodé
put empty into tchainenew
-- on parcourt la chaîne caractère par caractère
repeat with x=1 to the length of tChaine
-- le caractère est le code 195
-- le caractère suivant sera un caractère accentué
if charToNum(char x of tchaine) = 195 then
-- validation
put true into tAccent
else
-- caractère accentué
if tAccent then
-- annulation
put false into tAccent
-- on récupère le code correspondant au caractère
switch charToNum(char x of tchaine)
case 160
put tchainenew & "à" into tchainenew
break
case 169
put tchainenew & "é" into tchainenew
break
case 168
put tchainenew & "è" into tchainenew
break
case 174
put tchainenew & "î" into tchainenew
break
case 162
put tchainenew & "â" into tchainenew
break
case 185
put tchainenew & "ù" into tchainenew
break
case 170
put tchainenew & "ê" into tchainenew
break
case 167
put tchainenew & "ç" into tchainenew
break
end switch
else
-- gestion normale des caractères
put tchainenew & char x of tchaine into tchainenew
end if
end if
end repeat