Como os feeds de vários bytes com segurança de análise em Ruby / Rails?
-
12-09-2019 - |
Pergunta
(Desculpe se uma pergunta newb ... eu fiz um pouco de pesquisa, honestamente ...)
Estou a escrever algum código Ruby on Rails para analisar feeds RSS / Atom. Meu código está jogando-se sobre em um traquinas '£' símbolo.
Eu tenho tentado a abordagem de normalizar as descrição eo título campos dos alimentos antes de fazer qualquer outra coisa:
descr = self.description.mb_chars.normalize(:kc)
No entanto, quando se atinge a corda com o '£', eu estou supondo que mb_chars atinge um problema e retorna um objeto regular de rubi da cadeia. Eu recebo o erro:
undefined method `normalize' for #<String:0x5ef8490>
Então, qual é o melhor processo para defensivamente preparar estas cordas para inserção no banco de dados? (Eu preciso fazer um monte de processamento de corda sobre eles também)
O meu problema é agravado em que eu não sei o formato do feed eu estou processando. Por exemplo, eu tive um pouco de sorte com a seguinte linha:
descr = Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv descr
No entanto, quando encontra o '£' ele simplesmente trunca tudo depois desse ponto.
Quando eu exibir o '£' símbolo com a função String.inspect, ele exibe a '\ 243'. Na falta de um método para lidar 'corretamente' com este símbolo, eu ficaria bastante feliz em substituí-lo por outro valor (como 'GBP'). Então, ajuda com que o código seria apreciada também.
A alimentação em questão é http://www.dailymail.co. uk / desporto / futebol / index.rss
Solução 2
Eu estava faltando algo bastante básico -. Eu estava adivinhando a codificação da alimentação que estava entrando
Então agora eu estou olhando para (a) o conjunto de caracteres nos cabeçalhos de resposta HTTP, então (b) a codificação na declaração XML no próprio feed.
Uma vez que têm que codifica o uso iconv para movê-la em UTF-8.
Até aí tudo bem.
Outras dicas
Eu encontrei uma solução:
Para corrigi-lo, eu tive que definir a $ KCODE (codificação) para o documento:
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 / projetos / 8994 / bilhetes / 3504-string-parameterize-normalize-bug