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.
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
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 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.
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.