Vous êtes ici:

Menu

Gérer les caractères accentués avec LiveCode pour SQLite

live-code community
Pour mon projet PocketCible, j'ai besoin d'une petite gestion de base de données. J'ai choisi SQLite, une librairie étant fournie dans LiveCode. La création et la gestion d'une base SQLite ne posent aucun problème, il existe de nombreuses informations pour coder son programme. Mais lorsque j'ai eu besoin d'utiliser des produits tiers pour gérer ma base et saisir des données, qu'elle ne fut les ma surprise d'avoir des bizarreries avec les caractères accentués.

codefrench01


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 Sad

codefrench02


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.

codefrench03

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

blog comments powered by Disqus
 Vous êtes ici: