format internet:

…please wait (42% completed)…

rails,ajax,charset (i)

Posted by javier ramirez on November 4, 2006

Los que programamos en español/castellano ya estamos acostumbrados a que el juego de caracteres que necesitamos no esté soportado por defecto y tengamos que trabajar un poco para que todo funcione como debería.

En rails, y si queremos utilizar una codificación ISO-8859-1, esto lo arreglamos metiendo en nuestro layout una referencia al charset en el código html, y definiendo además un filtro de controlador que haga algo como lo siguiente

def set_charset
  @headers[‘Content-Type’] = “text/html; charset=ISO-8859-1” unless request.xhr?
end

El motivo de meterle la condición de que no sea una llamada xhr? es que si en un response de ajax ponemos el content-type a text/html, va a dar un error.

Si probamos a hacer esto en nuestra aplicación, veremos que todo se muestra bien. Ya no hay caracteres extraños y aparentemente todo va bien… hasta que se nos ocurre usar ajax.

Como antes decía, en una respuesta desde ajax no podemos poner el content-type con valor html porque nos va a dar un error; pero si no lo indicamos, es muy probable que el browser no sepa el encoding con el que estamos trabajando y acabe usando el que tengamos por defecto o UTF-8. De nuevo volvemos a tener caracteres extraños.

¿Solución? Para las llamadas vía ajax, podemos usar el content-type con valor “text/javascript”. Esto le indica al browser que lo que viene es código javascript y adicionalmente podemos indicarle el encoding apropiado.

El código del filtro de controlador modificado para que el charset sea consistente entre llamadas ajax y llamadas no ajax sería:

def set_charset
  str_type = request.xhr? ? ‘javascript’ : ‘html’
  @headers[‘Content-Type’] = “text/#{str_type}; charset=ISO-8859-1”
end

Ahora ya podemos ver como todo nuestro contenido, sea petición http directa o sea una llamada vía ajax, se muestra con el encoding deseado.

… lo malo vendrá cuando queramos desde ajax enviar contenido al servidor… pero eso lo contaremos más adelante. Mantén tu rss a la escucha!!!

searchwords: charset, utf-8, iso-8859-1, iconv, prototype.js, javascript, encodeURIComponent, ajax

One Response to “rails,ajax,charset (i)”

  1. […] rails,ajax,charset (i) […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: