Comment analyser en toute sécurité dans Ruby se nourrit multi-octets / Rails?
-
12-09-2019 - |
Question
(Désolé si une question newb ... Je l'ai fait un peu de recherche, honnêtement ...)
J'écris certains Ruby on Rails pour analyser le code RSS / ATOM. Mon code jette-sur un fichu symbole « £ ».
J'ai essayé l'approche de la normalisation et la description des champs titre des aliments avant de faire quoi que ce soit d'autre:
descr = self.description.mb_chars.normalize(:kc)
Cependant, quand il frappe la corde avec le « £ », je devine que mb_chars frappe un problème et retourne un objet régulier Ruby String. Je reçois l'erreur:
undefined method `normalize' for #<String:0x5ef8490>
Alors, quel est le meilleur processus pour préparer défensivement ces chaînes pour l'insertion dans la base de données? (Je dois faire un tas de traitement des chaînes sur eux aussi)
Mon problème est aggravé par le fait que je ne connais pas le format de l'alimentation Je traitement. Par exemple, j'ai eu un peu de chance avec la ligne suivante:
descr = Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv descr
Cependant, lorsqu'il rencontre le « £ » il tronque simplement tout après ce point.
Quand j'afficher le symbole « £ » avec la fonction String.inspect, il affiche à « \ 243 ». A défaut d'une méthode pour traiter « correctement » avec ce symbole, je serais assez heureux de le substituer à une autre valeur (comme « GBP »). Donc, aider à ce code serait apprécié aussi bien.
L'alimentation en question est http://www.dailymail.co. Royaume-Uni / sport / Football / index.rss
La solution 2
je manque quelque chose assez basique -. Je devinais au codage de l'alimentation qui entrait
Alors maintenant, je suis à la recherche (a) le jeu de caractères dans les en-têtes de réponse HTTP, puis (b) le codage dans la déclaration XML dans l'aliment lui-même.
Une fois que je l'encodage j'utiliser iconv pour le déplacer en UTF-8.
Jusqu'à présent, si bon.
Autres conseils
Je l'ai trouvé une solution:
Pour résoudre ce problème, je devais définir la KCODE $ (Encodage) pour le document:
require 'rubygems'
require 'active_support/all'
$KCODE = 'UTF8'
str = "test ščž"
puts str.parameterize.inspect
puts str.parameterize.to_s
=> # => Test scz
Original post: https: //rails.lighthouseapp .com / projets / 8994 / billets / 3504-string-Paramétrez-Normaliser-bug