Affichage des articles dont le libellé est jeux de caractères. Afficher tous les articles
Affichage des articles dont le libellé est jeux de caractères. Afficher tous les articles

vendredi 21 novembre 2008

Ruby pack & unpack - Problème de jeux de caractères

Il arrive souvent que dans les applications nous rencontrons un problème avec les différents jeux de caractères (ASCII, LATIN-1, UTF-8) ; il faut alors les convertir. [astuce]
Remarque : afin de gérer tous les caractères de toutes les langues, préférez l'encodage UTF-8.

$KCODE = 'U' #UTF-8 : s'assurer que le code de la page est en UTF-8

En Ruby vous pouvez trouver ceci pour résoudre votre problème : [iconv]

# attention destination, source Latin-1 => UTF-8
@c = Iconv.new('utf-8','iso-8859-1')
text = @c.iconv(mon_texte_a_encoder)


Iconv.new('iso-8859-15//IGNORE//TRANSLIT', 'utf-8').iconv(text)
Cette fonction comporte cependant quelques "Bugs" et vous devez gérer les cas particuliers des accents.
Il est donc préférable d'utiliser
pack, unpack :

*/
unpack : créé un tableau avec le n° du caractère ascii (code ASCII)
C : 0 à 255
c : -128 à 127

*/
pack : ffff
U : UTF-8

Transformer un "string" iso-8859-1 en UTF-8 :
string.unpack('C*').pack('U*')
Ruby Doc [arr.pack] - [str.unpack(format) => anArray]