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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top