2009-08-24 8 views
5

Malheureusement, l'Unicode 0.1 (sudo gem install unicode) ne fonctionne pas sur Ruby 1.9. J'ai l'extrait suivant:Comment remplacer la gemme Unicode sur Ruby 1.9?

require "rubygems" 
require "unicode" 

str = "áéíóúç" 
Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n, "") 
#=> aeiouc 

Je l'utilise pour convertir des titres en permalien, sans enlever les caractères accentués.

Existe-t-il un moyen de convertir de tels textes en utilisant les méthodes pack ou unpack?

+0

Vous devriez fouiller dans les archives ruby-talk. Je suis sûr que dans les derniers jours/semaines, l'auteur de la gemme Unicode a annoncé une nouvelle version, et je suis également sûr que Ruby 1.9 a été discuté dans ce fil. Cependant, je n'ai pas lu le fil, donc je n'ai pas de détails. –

+0

En fait, ce n'était pas * la gemme Unicode, mais la gemme Unicode-Utils mentionnée par @molf ci-dessous. (Ce n'était pas non plus au cours des derniers jours, c'était il y a 3 mois.) –

Répondre

13

Mise à jour: une meilleure option peut être d'utiliser la pierre précieuse unicode_utils qui a été créé spécialement pour ces fonctionnalités manquantes:

require "unicode_utils" 
UnicodeUtils.nfkd("áéíóúç").gsub(/[^\x00-\x7F]/,'').to_s 
#=> "aeiouc" 

Y at-il une possibilité que vous pouvez compter sur ActiveSupport Rails? Ensuite, vous pouvez effectuer les opérations suivantes:

require "activesupport" 
mb_str = ActiveSupport::Multibyte::Chars.new("áéíóúç") 
mb_str.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s 
#=> "aeiouc" 

ActiveSupport::Multibyte a été écrit pour apporter UTF-8/support Unicode à Ruby 1.8, mais fonctionne très bien dans 1,9 aussi. Vous pouvez peut-être emprunter une partie de the code si vous ne le souhaitez pas en tant que dépendance externe.

+0

Joli remplacement! J'utilise Unicode gem sur un plugin Rails, donc je suis sûr de pouvoir compter dessus! Merci beaucoup! Il serait bien d'avoir un remplacement en utilisant seulement Ruby 1.9, car il y a beaucoup de gemmes qui l'utilisent et ActiveSupport peut ne pas être un choix pour chacun d'entre eux. –

+0

C'est à ça que je pensais dans mon commentaire ci-dessus. Merci de me le rappeler! Je vais en avoir besoin maintenant dans mon projet de jouet. –

+0

Je pense qu'il est préférable d'utiliser la gemme unicode-utils au lieu de ActiveSupport lors du remplacement de l'Unicode sur les gemmes! Merci! ;) –

1

Il existe également une méthode I18n.transliterate('string') dans Rails. Fonctionne comme un charme.

+0

Je ne trouve pas de références pour cette méthode, pouvez-vous fournir un lien vers la documentation? Merci! – dgilperez

+0

'http: // apidock.com/rails/ActiveSupport/Inflector/transliterate' –

+0

J'ai mis à jour ma réponse, il semble que' # to_latin' a été supprimé. –

Questions connexes