Quel est le moyen le plus simple de translittération des caractères non anglais à Ruby. C'est la conversion telle que: p>
translit "gély" code>
# => "gevry" code> p>
3 Réponses :
Ruby a un iconv bibliothèque dans son stdlib qui convertit Encodements de manière très similaire à la commande habituelle iconv code> p>
Ouais .. iconv.iconv ('ascii // ignore // translit', 'utf-8', chaîne) .to_s code> fait le travail.
Je viens d'essayer cela sur l'exemple de l'OP et je suis retourné "Glry", pas "Gevry".
@jrdioko Il devrait être iconv.iconv ('ascii // translit // ignore', 'utf-8', chaîne) code>
Vous devez utiliser la méthode iconv.conv code> au lieu de iconv.iconv code> pour cela.
Iconv.iconv sera obsolète, comment faites-vous cette translittération à l'aide de la chaîne # Encode à la place?
Essayez de regarder Ce script de Techniconseils qui remplace les caractères accentués dans une chaîne. Exemple d'utilisation:
"Gévry".removeaccents #=> Gevry
Utilisez le gem strong> unicodetils strong>. Cela fonctionne en 1.9 et 2.0. Iconv a été obsolète dans ces versions.
> "\u00e9" #=> "é"
> "\u0065\u0301" #=> "eÌ"
> "\u00e9" == "\u0065\u0301" #=> false
> "\u00e9" > "\u0065\u0301" #=> true
> "\u00e9" >= "f" #=> true (composed é > f)
> "\u0065\u0301" > "f" #=> false (decomposed é < f)
> "Résumé".chars.count #=> 6
> decomposed = UnicodeUtils.nfkd("Résumé")
#=> "ReÌsumeÌ"
> decomposed.chars.count #=> 8
> decomposed.length #=> 6
> decomposed.gsub(/(\p{Letter})\p{Mark}+/,'\\1')
#=> "Resume"
avec le premier formulaire étant le plus populaire comme point de code unique. La deuxième forme est le format décomposé, séparant le graphème (ce qui apparaît comme "©" sur votre écran) dans ses deux points de code de base, l'ASCII "E" et la marque d'accent aigu. Unicode peut composer un graphème de nombreux points de code, ce qui est utile dans certains systèmes d'écriture asiatiques. P>
Remarque Vous souhaitez généralement normaliser vos données dans un format standard pour la comparaison, le tri, etc. dans RUBY Les deux formats de "©" ici ne sont pas égaux (). En IRB, faites ceci: p> maintenant que nous avons la chaîne au format NFKD, nous pouvons appliquer une expression régulière à l'aide de la syntaxe "Nom de la propriété" (\ p {ithle_Name} ) correspondre à une lettre suivie d'une ou plusieurs "marques" diacritiques. En capturant la lettre correspondante, nous pouvons utiliser GSUB pour remplacer la lettre + DiCritics par la lettre capturée dans toute la chaîne. p> Cette technique supprimée les marques diacritiques des lettres ASCII et ne translitez pas des ensembles de caractères tels que des chaînes grecques ou cyrilliques en lettres ASCII équivalentes. p> p>
+1 pour la manière ingénieuse de séparer les accents de la lettre, puis de les éliminer. -1 pour ne pas normaliser "ı 'comme" i'
Cela semble être un duplicata exact de ma question précédente: Stackoverflow.com/Questtions/225471/...