Déclaration de casse de chaîne Ruby 1.8 et UTF-8
-
20-08-2019 - |
Question
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 à l'aide de la déclaration de casse, mais mon code source n'est pas codé en UTF-8. Si je sauvegarde le code source au format UTF-8, une erreur se produit lorsque je tente de le démarrer: (
Qu'est-ce que je dois faire?
Peut-on lire cette chaîne à partir d'un fichier txt UTF-8 externe?
P.S. J'utilise Ruby 1.8
P.S. Je veux dire comparer ainsi:
result = case utf8string
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end
La solution
Je dirais que vous devez modifier votre éditeur de texte car la nomenclature n'est pas pour UTF-8. UTF-8 n'est pas dépendant de l'ordre des octets. Voir le texte du lien pour plus de détails.
Autres conseils
J'ai constaté que mon problème n'était pas en cas de déclaration
Le problème était que, lorsque je sauvegardais mon code source au format UTF-8, mon éditeur de texte ajoutait 3 octets (BOM) au début pour indiquer que le codage était UTF-8.
Q: Qu'est-ce qu'une nomenclature?
A: Une marque d'ordre d'octet (BOM) est constituée du code de caractère. U + FEFF au début d’un flux de données, où il peut être utilisé comme signature définissant l’ordre des octets et la forme de codage, principalement des fichiers en texte clair. Sous certains protocoles de niveau supérieur, l'utilisation d'une nomenclature peut être obligatoire (ou interdit) dans le flux de données Unicode défini dans ce protocole.
UTF-8, UTF-16, UTF-32 & amp; Nomenclature
L’erreur que j’obtiens est la suivante:
1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression
Essayez d’utiliser la mb_chars
méthode issue de la ActiveSupport de Rails. cadre:
result = case utf8string.mb_chars
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end