Otra pregunta sobre acentos

Hola a todos, estoy haciendo una aplicación en español con las
siguientes características:

Charset de la base de datos: utf-8.
Charset de mis ficheros fuentes: utf-8.
Charset de mi navegador: utf-8.
Charset de la cabecera meta: utf-8.

Con esto, era capaz de ver los datos bien con el visualizador de base de
datos pero en mi aplicación aparecían con caracteres raros.

Si cambio todo lo de arriba a charset iso-8859-15 sí se ve bien. La
pregunta es, ¿no debería verse bien con todo utf-8? Me gustaría aplicar
utf-8 por si tengo que utilizar AJAX.

Gracias.

On Dec 17, 2007, at 7:27 PM, Damaris F. wrote:

datos pero en mi aplicación aparecían con caracteres raros.
El tag meta esta pensado para cuando abres un archivo HTML de disco,
digamos. Para una pagina servida por una aplicacion web el charset a
utf8 ha de ir es la cabecera Content-Type, esa la tienes bien tambien?
(Esto desde la 1.2 es automatico salvo que configures otra cosa via
ActionController::Base.default_charset=.)

Si cambio todo lo de arriba a charset iso-8859-15 sí se ve bien.

Si cambias cual de ellos?

– fxn

Damaris F. wrote:

Hola a todos, estoy haciendo una aplicación en español con las
siguientes características:

Charset de la base de datos: utf-8.
Charset de mis ficheros fuentes: utf-8.
Charset de mi navegador: utf-8.
Charset de la cabecera meta: utf-8.

Con esto, era capaz de ver los datos bien con el visualizador de base de
datos pero en mi aplicación aparecían con caracteres raros.

Si cambio todo lo de arriba a charset iso-8859-15 sí se ve bien. La
pregunta es, ¿no debería verse bien con todo utf-8? Me gustaría aplicar
utf-8 por si tengo que utilizar AJAX.

Gracias.

Mirate el archivo config/database.yml

Deberías tener esta línea:
encoding: utf8
pero supongo que no la tendrás y por eso te falla.

On Dec 18, 2007, at 2:16 PM, Damaris F. wrote:

Hola chicos.
Sí, tengo el content-type a utf-8 y el encoding: utf8 en el
database.yaml

He descubierto que cambiando mi tabla de InnoDB a MyIsam sí que
funciona
todo correctamente (lo que tengo que probar ahora es si con eso ya me
vale; es decir, probar a eliminar el encoding:utf8 en el
database.yaml,
etc. para saber qué es realmente lo que realmente hace falta)

No deberia hacer falta cambiar el tipo de la tabla, puede que se
escape algo.

Aparentemente tienes todas las configuraciones bien. Entonces el
siguiente punto sospechoso es la entrada de datos. Haces algun tipo de
carga de datos desde ficheros? Te suben por ejemplo CSVs, Excels,
logs…?

– fxn

Hola chicos.
Sí, tengo el content-type a utf-8 y el encoding: utf8 en el
database.yaml

He descubierto que cambiando mi tabla de InnoDB a MyIsam sí que funciona
todo correctamente (lo que tengo que probar ahora es si con eso ya me
vale; es decir, probar a eliminar el encoding:utf8 en el database.yaml,
etc. para saber qué es realmente lo que realmente hace falta)

Gracias por todo.

Fernando C. wrote:

Damaris F. wrote:

Hola a todos, estoy haciendo una aplicación en español con las
siguientes características:

Charset de la base de datos: utf-8.
Charset de mis ficheros fuentes: utf-8.
Charset de mi navegador: utf-8.
Charset de la cabecera meta: utf-8.

Con esto, era capaz de ver los datos bien con el visualizador de base de
datos pero en mi aplicación aparecían con caracteres raros.

Si cambio todo lo de arriba a charset iso-8859-15 sí se ve bien. La
pregunta es, ¿no debería verse bien con todo utf-8? Me gustaría aplicar
utf-8 por si tengo que utilizar AJAX.

Gracias.

Mirate el archivo config/database.yml

Deberías tener esta línea:
encoding: utf8
pero supongo que no la tendrás y por eso te falla.

Xavier N. wrote:

No deberia hacer falta cambiar el tipo de la tabla, puede que se
escape algo.

Aparentemente tienes todas las configuraciones bien. Entonces el
siguiente punto sospechoso es la entrada de datos. Haces algun tipo de
carga de datos desde ficheros? Te suben por ejemplo CSVs, Excels,
logs…?

– fxn

Lo del tipo de tabla lo hice porque lo ví aquí [1]. Y efectivamente
funcionó.

Lo de los datos sí, los subo con CSV. Pero vamos, yo tenía una
aplicación en inglés hace tiempo en Rails, donde yo misma metía los
datos normal desde la aplicación, y también tenía esos problemas.

[1]
http://ruphus.com/blog/2005/06/23/getting-unicode-mysql-and-rails-to-cooperate/

Si no digo que no :smiley:

Pero ya te digo que me pasaba lo mismo en una aplicación normal que
tenía y sólo pude solucionarlo añadiendo en el controlador un before de
esos, añadiendo en éste que la cabecera de los archivos html fuera
utf-8, algo que me negaba a poner en esta nueva aplicación porque me
parecía repetir la misma información.

Xavier N. wrote:

On Dec 18, 2007, at 3:55 PM, Damaris F. wrote:

– fxn

Lo del tipo de tabla lo hice porque lo v� aqu� [1]. Y efectivamente
funcion�.

Lo de los datos s�, los subo con CSV. Pero vamos, yo ten�a una
aplicaci�n en ingl�s hace tiempo en Rails, donde yo misma met�a los
datos normal desde la aplicaci�n, y tambi�n ten�a esos problemas.

Ahi esta el problema, me apuesto una tapa de calamares a la romana.

Debes tener siempre el control del encoding del input.

En web esto funciona porque si la pagina esta en UTF8 los forms los
envia el navegador en UTF8 y todo va solo tal como Rails esta por
defecto desde la 1.2.

Si cargas un CSV o tienes cualquier otra fuente de datos externa has
saber en que encoding vienen las cosas
, porque si no estan en UTF8
debes ser tu quien convierta el encoding a mano con iconv. Son los
datos convertidos por ti los que metes en base de datos en se caso, y
descartas los originales.

Si sabes en que vienen los CSVs porque controlas el origen entonces la
conversion va a pi�on, de otro modo se puede usar la libreria
charguess que implementa algunas heurisiticas y te da el encoding con
el que cree que el texto esta escrito, en ese caso es no hay certeza
pero es lo mas que puedes hacer.

– fxn

On Dec 18, 2007, at 3:55 PM, Damaris F. wrote:

– fxn

Lo del tipo de tabla lo hice porque lo ví aquí [1]. Y efectivamente
funcionó.

Lo de los datos sí, los subo con CSV. Pero vamos, yo tenía una
aplicación en inglés hace tiempo en Rails, donde yo misma metía los
datos normal desde la aplicación, y también tenía esos problemas.

Ahi esta el problema, me apuesto una tapa de calamares a la romana.

Debes tener siempre el control del encoding del input.

En web esto funciona porque si la pagina esta en UTF8 los forms los
envia el navegador en UTF8 y todo va solo tal como Rails esta por
defecto desde la 1.2.

Si cargas un CSV o tienes cualquier otra fuente de datos externa has
saber en que encoding vienen las cosas
, porque si no estan en UTF8
debes ser tu quien convierta el encoding a mano con iconv. Son los
datos convertidos por ti los que metes en base de datos en se caso, y
descartas los originales.

Si sabes en que vienen los CSVs porque controlas el origen entonces la
conversion va a piñon, de otro modo se puede usar la libreria
charguess que implementa algunas heurisiticas y te da el encoding con
el que cree que el texto esta escrito, en ese caso es no hay certeza
pero es lo mas que puedes hacer.

– fxn

Si te envian por un post los datos, entendemos todos que estos datos han
de estar en utf8 para que se guarden bien en la base de datos no?

Si en un formulario hay un campo de texto el before filter que comentas,
que ahora ya no hace falta, forzaba que las cabeceras estuvieran en
utf-8
para que no hubiera problemas de encoding.

Pero ahora estas subiendo un archivo y lo estas procesando, así que
posiblemente este fichero esté en iso-8859-1 y lo tengas que convertir
a utf-8 con iconv como dice Xavier N…

 iconv -f iso-8859-1 -t utf-8 file.csv > file_utf8.csv

Lo que puedes probar es hacer la conversión y subir los dos archivos y
mirar que pasa.

O tambien mirar el encoding del archivo:

 [sueisfine]$ file file.csv
 file.csv: ISO-8859 text, with no line terminators

 [sueisfine]$ file file_utf8.txt
 file_utf8.txt: UTF-8 Unicode text, with no line terminators

Un saludo,

Francesc

On Dec 18, 2007, at 4:26 PM, Damaris F. wrote:

On Dec 18, 2007, at 3:55 PM, Damaris F. wrote:

met�a los

el que cree que el texto esta escrito, en ese caso es no hay certeza
pero es lo mas que puedes hacer.

– fxn


Posted via http://www.ruby-forum.com/.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

Creo que alguien se ha ganado una tapita de calamares. :wink:

Francesc

On Dec 18, 2007, at 4:15 PM, Xavier N. wrote:

carga de datos desde ficheros? Te suben por ejemplo CSVs, Excels,
Ahi esta el problema, me apuesto una tapa de calamares a la romana.
datos convertidos por ti los que metes en base de datos en se caso, y


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

Pues no, a ver.

A mí me han dado un archivo medio csv medio a saber qué. Así que yo con
Mysql Query Browser cargo el fichero como script, pero lo modifico para
poner los INSERT INTO y demás, porque además el Query Browser este no
deja importar csv.
Es decir, que yo inserto, podríamos decir que a pelo, mediante
sentencias INSERT en mi base de datos que he definido como UTF-8. Que el
script me da igual como esté, vaya (digo yo). Que si mi tabla pone que
está en utf-8, los datos deberían insertarse como utf-8.

On Dec 18, 2007, at 5:06 PM, Damaris F. wrote:

está en utf-8, los datos deberían insertarse como utf-8.
Yep, el problema es que no es asi.

MySQL asume que los bytes que envias son la representacion en UTF8
de los datos, y es responsabilidad del programador que vayan asi. No
hay ninguna conversion implicita. Por tanto has de procesar el CSV o
el cargador SQL primero para que este en UTF8, y una vez hecho esto es
que cargas los datos en la base de datos.

– fxn

De acuerdo, es que estaba dando por supuesto eso.

Pues muchas gracias chicos, ya veremos que hacemos con los calamares :slight_smile:

Tu ten la tabla en utf-8 y entra desde terminal configurado con
iso-8859-1
a MySQL y mira como se te insertan los datos.

A mi entender que tengas la table en utf-8 no quiere decir que los datos
que entran se transformen en utf-8, para muestra lo que te esta
pasando no?

Tu mirate el formato que tiene tu fichero. Puedes hacer un “file
fichero.csv”
para confirmar el encoding del archivo.

El otro dia en el Ruby Meeting en Barcelona alguien comentó un capítulo
de no se que libro que habla de encoding, creo que estaria bien que
posteara
el titulo para poder echarle una ojeada. Yo hace unos meses leí un
libro de
Cal Handerson en el que le dedica parte a la
internacionalización.
http://www.amazon.com/exec/obidos/ASIN/0596102356

Un saludo,

Francesc

On Dec 18, 2007, at 5:06 PM, Damaris F. wrote:

Que el
script me da igual como esté, vaya (digo yo). Que si mi tabla pone que
está en utf-8, los datos deberían insertarse como utf-8.

Posted via http://www.ruby-forum.com/.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603