Forum: Rails-ES Codificación WE8MSWIN1252

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-06-12 11:38
(Received via mailing list)
Buenas, tengo una base de datos oracle que tiene la codificación de
caracteres WE8MSWIN1252

Tengo el típico problema de las tildes y los caracteres latinos, que me
lo
mete como caracteres raros al insertarlo con active scaffold.

Si pongo:

 after_filter :set_charset

def set_charset
    content_type = @headers["Content-Type"] || 'text/html'
    if /^text\//.match(content_type)
      @headers["Content-Type"] = "#{content_type}; charset=utf8"
    end
  end


 me inserta en bbdd caracteres extraños. Y si meto directamente en la
bbdd
el dato, me lo saca mal en el html generado.

¿Cómo se solucionan estas cosas, por dios?
Afe765ee2d37bd6ad7e55d6f5fd35f1e?d=identicon&s=25 Hernan Fernandez (Guest)
on 2007-06-12 17:44
(Received via mailing list)
Hola
No conozco Oracle pero reconozco MSWIN1252 eso es lo mismo que el juego
de
caracteres Latin1 o iso-8859-1. Fijate en el manual del conector si no
hace
falta forzar el juego de caracteres en la conexión.

Ojo con el código que pegaste, donde dice utf8 debería ser utf-8, pero
con
la definición de la base de datos debería funcionar con iso-8859-1

Tienes que tener configurado el mismo juego de caracteres en la DB y en
HTML

Saludos
Hernán
1f2eadfb41362800ebc2cf211b91d0f7?d=identicon&s=25 javier ramirez (Guest)
on 2007-06-12 18:02
(Received via mailing list)
Hola
> Buenas, tengo una base de datos oracle que tiene la codificación de
> caracteres WE8MSWIN1252
>
> Tengo el típico problema de las tildes y los caracteres latinos, que
> me lo mete como caracteres raros al insertarlo con active scaffold.
Active Scaffold utiliza ajax para el envío de los datos... cuando envías
con ajax mediante la librería prototype siempre se envía la
información en utf-8 independientemente del charset en el que esté tu página. 
Esto
es así porque el método serialize de prototype hace uso de una
función javascript estándar que convierte siempre a utf8.

Si tu backend no es utf-8, en cada llamada ajax deberías hacer una
conversión de lo que te llegue a tu encoding (eso lo haces con
Iconv.conv). Si además usas el fallback de que si no hay javascript
habilitado use directamente formularios de toda la vida sin ajax, debes
tenerlo en cuenta porque si no en esos casos te va a intentar convertir
algo que ya va en tu encoding. Para eso no tienes más que condicionar la
conversión del utf8 a tu encoding si lo que recibes es xhr?

Con las cabeceras http en su sitio, el encoding especificado en el
database.yml siendo el correcto, tu tag de apertura de html en tus
layouts indicando el charset adecuado, el fuente de los ficheros en sí
mismo también codificado según lo que necesites y teniendo en cuenta que
las llamadas ajax de prototype te envían siempre utf-8, debería
funcionar el encoding correctamente.

saludos,

javier ramirez
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-06-13 11:05
(Received via mailing list)
Buenas, finalmente lo solucioné así:

  before_filter :convert_hash
  after_filter :set_charset

  ICONV = Iconv.new('ISO-8859-1', 'UTF-8')


  def set_charset
    content_type = headers["Content-Type"] || 'text/html'
    if /^text\//.match(content_type)
      headers["Content-Type"] = "#{content_type}; charset=iso-8859-1"
    end
  end


  def convert_hash
    if request.xhr?
         codificar(params)  # si es una llamada ajax, llamo al método
codificar con los params
    end
  end

  def codificar(hash)
    hash.each_key  do |a|
      hash[a] = ICONV.iconv(hash[a]) if hash[a].is_a?String   # si es
cadena, le aplico el ICONV
      codificar hash[a] if hash[a].is_a?Hash # si es un hash, llamo a
esta
misma función
    end
  end


Así me aseguro de que todo con las cabeceras text venga en latin1 y si
la
llamada es ajax, hago la conversión de utf8 a latin1.

Muchas gracias por vuestra ayuda
This topic is locked and can not be replied to.