2008-12-09 5 views
1

J'ai une tâche Rake (dans le répertoire lib/tasks) que je lance avec cron sur mon hébergement web partagé. Le problème est que je veux comparer une chaîne UTF-8 en utilisant la déclaration de cas, mais mon code source n'est pas codé en UTF-8. Si j'enregistrer le code source en UTF-8 il y a erreur lorsque je tente de démarrer :(Instruction Ruby 1.8 et UTF-8 string compare

Qu'est-ce que je dois faire?

peut être lu cette chaînes de fichier UTF-8 txt externe?

PS J'utilise Ruby 1.8

PS Je veux dire comparer cette façon:

result = case utf8string 
    when 'АБВ': 1 
    when 'ГДИ': 2 
    when 'ЙКЛ': 3 
    when 'МНО': 4 
    else 5 
end 

Répondre

1

Je dirais que vous devez changer votre éditeur de texte comme nomenclature est pas nécessaire pour UTF-8. UTF-8 n'est pas tributaire de l'ordre des octets. Voir link text pour plus de détails.

0

Essayez d'utiliser la méthode mb_chars de Rails de ActiveSupport framewo rk:

result = case utf8string.mb_chars 
    when 'АБВ': 1 
    when 'ГДИ': 2 
    when 'ЙКЛ': 3 
    when 'МНО': 4 
    else 5 
end 
2

Je trouve que mon problème n'a pas été en cas statment

Le problème est que lorsque je sauve mon code source au format UTF-8, mon éditeur de texte ajouter 3 octets (BOM) au commence à indiquer que le codage est UTF-8.

Q: Qu'est-ce qu'une nomenclature?

A: Une marque d'ordre d'octet (BOM) est constitué par le code de caractère U + FEFF au début d'un flux de données, où il peut être utilisé comme une signature définissant l'ordre des octets et la forme de codage, principalement des fichiers en clair non marqués . Sous certains protocoles de niveau supérieur, l'utilisation d'une nomenclature peut être obligatoire (ou interdite) dans le flux de données Unicode défini dans ce protocole.

UTF-8, UTF-16, UTF-32 & BOM

L'erreur que je reçois est:

1: Invalid char `\357' in expression 
1: Invalid char `\273' in expression 
1: Invalid char `\277' in expression