Si estás en 1.8.7 podes usar iconv para convertir el encoding a algo que json entienda.
AFAIK json debería entender utf-8, pero no siempre anda.
Sorry for top posting. Sent from mobile.
Kossuth Museum Ship (Vigad� Square)
Tsl vez porque no es una letra sino un símbolo de control?
http://www.fileformat.info/info/unicode/char/fffd/index.htm
Sorry for top posting. Sent from mobile.
ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
valid_string = ic.iconv(untrusted_string + ' ')[0..-2]
Source : http://po-ru.com/diary/fixing-invalid-utf-8-in-ruby-revisited/
2012/8/29 Alvaro Olivencia <alvaroo...@gmail.com>:
> Así es luis.
Hola Alvaro, esta vez respondo desde mi maquina, asi puedo darte una
mejor respuesta.
No sos el unico, encoding es un gran tema, y ni que hablar de las
> De todas formas, al no ser un ducho en encoding (solo lo muy basico), todo
> este tema me tiene algo confundido.
inconsistencias de Ruby 1.9 sobre el tema... rant para otro email..
Copy y paste de un documento de Word, es en muchos de los casos el
> Primero que nada: Cómo es que fue a para ese símbolo a mi db ? O sea, la
> respuesta es fácil: fue un user que lo ingresó por medio de un form, pero
> esto me lleva a otra pregunta: debería remover todos estos chars ¨raros¨
> antes de insertar en la db ?
origen de los caracteres raros.
Este tema (aunque con otro non-printable symbol de unicode) se dio en
varios proyectos, y despues de analizar la mayoria son generados en
Word en Windows y non-English (muchas veces en instalaciones en aleman
y frances).
En primer momento, tenes que ver que podes hacer para vos reproducir
>
> Ahora bien, en este momento tengo que solucionar este problema teniendo en
> cuenta que varios user pudieron haber hecho lo mismo.
> En una primera instancia, si es posible, preferiría no correr una query que
> remueva todos estos simbolos raros ya que no quiero modificar datos de los
> usuarios.
>
> Entonces me gustaría resolver la cosa por medio de ruby (o algun método
> mágico de rails). Como antes dije, estoy usando ruby 1.8.7 y rails 2.3.8, mi
> tabla está en utf8.
> Intenté hacer algo como:
>
> ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
> valid_string = ic.iconv(untrusted_string + ' ')[0..-2]
> Source : http://po-ru.com/diary/fixing-invalid-utf-8-in-ruby-revisited/
>
> Pero no tuve suerte, sigue devolviendo \ufffd,
>
el problema, ignorando los datos existentes.
For ejemplo, en la consola de Rails:
>> a = "Museum Ship (Vigad\xEF\xBF\xBD Square) entrance"
=> "Museum Ship (Vigad? Square) entrance"
>> puts a
Museum Ship (Vigad? Square) entrance
=> nil
>> a.to_xs
=> "Museum Ship (Vigad� Square) entrance"
Ahora tengo el string como esta en el DB,
Ruby 1.8.7 no entiende de
encoding, asi que vamos a ver de suprimir cualquier cosa que no sea
UTF-8 y que sean caracteres de control.
Si te fijas en el HTML que hace el output y te fijas de usar h para
> Otros datos:
>
> Puedo acceder correctamente al string por medio del browser, o sea,
> mostrando el record del user en el browser y todo funciona bien, supongo yo
> por el encoding utf8 que tengo seteado en rails.
sanitizar la salida, vas a ver que ese caracter se imprime como
� (o �)
http://www.fileformat.info/info/unicode/char/E4/index.htm
>> b = "L\xC3\xA3use"
=> "Lãuse"
>> b.to_xs
=> "Lãuse"
>> b.bytes.collect
=> [76, 195, 163, 117, 115, 101]
>> Iconv.iconv("ASCII//TRANSLIT//IGNORE", "UTF-8", b).first.bytes.collect
=> [76, 126, 97, 117, 115, 101]
>> Iconv.iconv("ASCII//TRANSLIT//IGNORE", "UTF-8", b)
=> ["L~ause"]
Saludos,