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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top