elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si  (Leído 8,120 veces)
Graphixx


Desconectado Desconectado

Mensajes: 1.336


Full Stack Developer


Ver Perfil WWW
[Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
« en: 29 Agosto 2014, 04:37 am »

Resulta que cuando exporto una base de datos con UTF8 por defecto quedan mal las tildes y Ñ, encambio con iso-8859-1 si
Pero me parece no recuerdo bien que cuando las importo con UTF8 por defecto si coje las tildes, muy raro no ?


En línea

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx Rōninnovation
JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
« Respuesta #1 en: 29 Agosto 2014, 05:34 am »

Seguramente lo que hace es pasarte a un equivalente numérico que representa ese carácter. Y si no es eso, entonces estás tratando de exportar una base de datos con otra codificación inicial.


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
« Respuesta #2 en: 29 Agosto 2014, 06:10 am »

Si la base de datos a la que estas exportando la informacion es ISO-8859 no tiene nada de raro. El archivo sql resultante de la exportacion tiene formato UTF-8?
En línea

Graphixx


Desconectado Desconectado

Mensajes: 1.336


Full Stack Developer


Ver Perfil WWW
Re: [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
« Respuesta #3 en: 29 Agosto 2014, 15:44 pm »

Esta es la configuracion del hosting:


Esta es la configuracion por defecto de la tabla:


Asi es como se ve por defecto la tabla, fijense que soporta tildes y Ñ:


Ahora si le doy exportar rapido:


Veran como ese tipo de exportacion rapida, no soporta ni tildes ni Ñ:


En cambio si le doy exportacion personalizada:


Vemos como esta con iso-8859-1 si que soporta las tildes y las Ñ:


Tengo la duda, hay algo que falta configurar en las opciones del Servidor?

Si creo las tablas asi, estan bien creadas para tildes y Ñ?
Código
  1. CREATE TABLE usuarios (
  2.  id INT(11) DEFAULT NULL,
  3.  cedula VARCHAR(30) DEFAULT NULL,
  4.  codigo VARCHAR(15) DEFAULT NULL,
  5.  email VARCHAR(200) DEFAULT NULL,
  6. )
  7. ENGINE = INNODB
  8. CHARACTER SET latin1
  9. COLLATE latin1_swedish_ci;
  10.  
El Character set: esta bien en latin1
El Collate: esta bien en latin1_swedish_ci
« Última modificación: 29 Agosto 2014, 15:50 pm por Graphixx » En línea

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx Rōninnovation
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
« Respuesta #4 en: 29 Agosto 2014, 16:27 pm »

Eso pasa porque la base de datos está usando latin iso y tu sitio web está procesando utf-8, por lo cual cuando exportas en utf8 se ve mal porque los datos reales están en utf8 pero las tablas las convierte a latin iso, pero cuando exportas a latin iso el phpmyadmin convierte automaticamente los carácteres.

Verifica tu proyecto completo, recuerda que la codificación de carácteres de tu sitio web debe estar definido en:

Las cabeceras enviadas vía php:
Código:
<?php header('content-type: text/html; charset=utf-8');

Las cabeceras en el html:
Citar
<meta charset="utf-8" />

La conexión mysql:
Código:
$mysqli = new mysqli(...);
$mysqli->set_charset('utf8'); // Ojo, sin guión

La entrada de inputs de php:
Código:
mb_internal_encoding('utf-8');
mb_http_output('utf-8');
mb_http_input('utf-8');
//mb_language('uni');
mb_regex_encoding('utf-8');

Los formularios en html:
Código:
<form accept-charset="utf-8" action="...

Los carácteres en htmlentites:
Citar
Bien: <b>Letra con acento, &aacute;</b>
Mal: <b>Letra con acento, á</b>

Escribir acentos en código html no es estandard, de hecho si lo validaras como xml te lo rechazaría diciendote que el xml está corrupto, todo carácter especial en xml y html deben escribirse con entidad html. El signo de interrogación abierto es &iquest;, el copyright es &copy; las comillas son &quote;, las eñes son &ntilde; etc etc.

Mira acá donde dice "Html Entity".
http://www.utexas.edu/learn/html/spchar.html

Al momento de crear la base de datos:
Código:
CREATE DATABASE `basededatos` CHARACTER SET utf8 COLLATE utf8_general_ci;

Al momento de crear las tablas:
Código:
CREATE TABLE tabla( columna text CHARACTER SET utf8 COLLATE utf8_unicode_ci) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Al momento de abrir tu editor de código asegúrate que sea un editor que esté trabajando bajo tu codificación, por ejemplo eclipse muchas veces te escribe en utf8 a pesar de que el archivo esté en latin iso, debes configurar el proyecto y especificar la codificación, sublimetext y notepad++ mantienen bien la codificación.

Luego de tener todo en regla no volverás a tener mas problemas con los acentos y eñes, de hecho yo trabajo siempre en utf8, no necesito latin iso para manejar los acentos, de hecho visual studio 2012 en adelante  crea proyectos por defecto en utf8 y jamas tiene problemas con los acentos.

Yo en lo personal siguiendo todo esto jamás he tenido problemas de codificación, antes si cuando no sabía y tenia la base de datos en una codificación y los archivos en otra, entonces los acentos se volvían como signos de interrogación y ahí tenía que conseguirme scripts para convertir bases de datos, etc, eso no debería pasar nunca si sigues bien el consejo de las codificaciones.

Ojo, json no soporta múltiples codificaciones, el estandard solo soporta utf8, los caracteres no convencionales se convierten en unicode, si todo tu proyecto usa utf8 entonces no tendrás problemas pero si usas latin iso entonces tendrás problemas al momento de usar datos en json.

A veces puedes decir.. en mi pc funciona bien, los acentos andan bien, pero derrepente viene otra persona y comienza a tener problemas con los acentos, eso es porque no todos los navegadores funcionan con la misma codificación por defecto, si bajas la versión de firefox en español te va a trabajar con latin iso y si bajas la version en ingles te va a usar utf8, pero ojo, no es que siempre lo use, por eso la cabecera de php dice "accept-", es porque acepta esa codificación por defecto y de esa manera haces trabajar a todos los navegadores bajo la misma codificación de caracteres y eso hará que nadie inserte caracteres fuera de tu codificación.

Por último recuerda... antes de hacer cualquier cosa haz respaldos porque puedes corromper tus datos ya existentes si no sabes migrar bien la codificación de una tabla/base de datos existente y te recomiendo usar mysqldump y no phpmyadmin para exportar porque phpmyamdin tiene muchas falencias, depende mucho de php y apache asi que si no tienes bien configurado tu servidor puedes tener problemas como por ejemplo que no te descargue la base de datos completa porque es muy grande y termines con la mitad de la base de datos con un error de php al final o puede que trabaje sin la codificación necesaria. Si instalaste mysql en tu pc deberias tener entonces instalada las herramientas básicas como el comando mysql y mysqldump para hacer respaldos locales y remotos el cual está diseñado para exportar bases de datos sin corromperlas tal cual están en producción.

Dale un vistazo a esto:
http://www.thegeekstuff.com/2008/09/backup-and-restore-mysql-database-using-mysqldump/
http://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql
http://es.wikipedia.org/wiki/UTF-8#Ventajas_y_desventajas
http://www.utexas.edu/learn/html/spchar.html
« Última modificación: 29 Agosto 2014, 16:44 pm por WHK » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
« Respuesta #5 en: 29 Agosto 2014, 17:00 pm »

La tabla no está en UTF-8, está en latin1, que es equivalente a ISO8859-1. Lo que está pasando aqui probablemente es que estas enviando la información en UTF-8 a la tabla latin1. Los datos no están en latin1, sino en UTF-8. Tu navegador debe estar interpretando los strings como UTF-8 por lo que al ver la tabla desde tu navegador, los datos deben aparecer bien.

El archivo resultante probablemente es ISO8859-1 por lo que tu editor de texto interpreta los caracteres UTF-8 en ISO8859-1, lo que lleva a interpretar la codificacion de diferente forma. Por ejemplo: á en UTF-8 usa 2 bytes, (0xC3, 0xA1). 0xC3 en ISO8859-1 es: à y 0xA1 en ISO8859-1 es: ¡, por lo que si lees á codificado en UTF-8 en ISO8859-1 debe producir: á.

Otro ejemplo:

La é:

UTF-8: (0xC3) (0xA9)
ISO8859-1: 0xC3 = Ã
ISO8859-1: 0xA9 = ©
ISO8859-1: (0xC3) (0xA9) = é

ISO8859-1 usa solo un byte para la lectura, mientras que UTF-8 es de longitud variable.

Tu información sigue en UTF-8 si la exportas normalmente es decir no ha sufrido ningun cambio. Con la opcion personalizada debe estar traduciendo UTF-8 a ISO8859-1 por lo que 0xC3, 0xA9 del UTF-8 (á) se vuelve: 0xE1 en ISO8859-1.

Para cambiar de latin1 a utf-8 en tu PHPmyadmin selecionas la tabla y vas al menu de Operaciones (Operations) y cambias el collation ahí. Si realmente no usas caracteres fuera de la codificación ISO8859-1 no uses UTF-8. Realmente no hay mucha diferencia la verdad, pero los acentos y caracteres especiales te ocuparan solo un byte.
En línea

JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: [Inquietud] Por que UTF-8 no exporta tildes y iso-8859-1 si
« Respuesta #6 en: 31 Agosto 2014, 16:09 pm »

La entrada de inputs de php:
Código:
mb_internal_encoding('utf-8');
mb_http_output('utf-8');
mb_http_input('utf-8');
//mb_language('uni');
mb_regex_encoding('utf-8');

Jajaja que dato, lo más extremo que he visto :D.

No hay que ser tan radical, con que sus archivos HTML tengan codificación utf8, al igual que su etiqueta meta, y sus archivo PHP, bastaría.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Obtener Lista de Caracteres ISO-8859-1
Programación Visual Basic
Freeze. 0 1,384 Último mensaje 1 Agosto 2007, 22:15 pm
por Freeze.
El Exportar De Fla A Swf No Exporta Todo
Diseño Gráfico
NaNo N´RoSeS 6 5,342 Último mensaje 22 Febrero 2008, 16:10 pm
por Azielito
UTF-8 e ISO-8859-1 juntos?
Desarrollo Web
mokoMonster 3 6,073 Último mensaje 1 Marzo 2011, 21:48 pm
por mokoMonster
Por que al exportar como utf8 se pierden las tildes, encambio con ISO 8859-1 no
Bases de Datos
Graphixx 0 3,957 Último mensaje 27 Septiembre 2013, 23:52 pm
por Graphixx
Problema con charset=iso-8859-1 y jquery
Desarrollo Web
Rata1960 1 1,768 Último mensaje 23 Noviembre 2017, 13:28 pm
por Rata1960
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines