✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo convertir GB2312 (u otros caracteres no ANSI) a codificación UTF-8 (tanto MySQL como Files Charset)

31

Mi primer sitio web, steakovercooked.com, comenzó en 2006 (hace 9 años). Y en ese momento, no sabía mucho sobre la codificación de archivos/conjunto de caracteres y, además, el UTF-8 no era tan popular para las páginas web en ese momento. En estos días, UTF-8 se vuelve tan popular, es decir, WordPress usa la codificación UTF-8 en todo el sitio para que pueda mostrar prácticamente cualquier idioma en un sitio sin problemas.

Cómo convertir GB2312 (u otros caracteres no ANSI) a codificación UTF-8 (tanto MySQL como Files Charset)

UTF-8-ascii-iso-8859-1

La página de códigos de todos los archivos (PHP, HTML, CSS y algunos otros archivos de texto sin formato), estaban en su mayoría en páginas de códigos ANSI y los caracteres chinos están codificados en varios bytes. Para mostrar estos caracteres (en codificación ANSI) en el navegador, debe colocarlos entre la etiqueta del encabezado en HTML para que los navegadores puedan entender:

En HTML5, puede escribir en un método mucho más corto:

Por lo tanto, la mayoría de los que no hablan chino no pueden ver los caracteres a menos que instalen el paquete de idioma GB2312 para el navegador. Además, es probable que algunos editores de texto comunes se equivoquen con los caracteres. Un solo carácter en chino son dos bytes, pero a veces el editor de texto simplemente lo corta por la mitad.

Convertir archivos (ANSI) a UTF-8

Antes de cambiar el meta encabezado a:

Deberá convertir los archivos a la codificación UTF-8. Hay muchas maneras de hacer eso. El método más simple sería usar el bloc de notas para guardar como codificación ‘UTF-8’.

Cómo convertir GB2312 (u otros caracteres no ANSI) a codificación UTF-8 (tanto MySQL como Files Charset)

bloc de notas-convertir-a-utf-8

Si tiene muchos archivos, puede hacerlo usando la utilidad iconv en Linux (Servidor VPS ). El siguiente script (guardado en el nombre de archivo, por ejemplo, toUTF) convertirá un solo archivo a UTF-8.

#!/bin/bash # https://helloacm.com   if [ "$#" -ne 1 ] ||! [ -r "$1" ]; then     echo "Usage: $0 file1"     exit 1 fi   x=`file -bi $1 | grep 'utf' | wc -l` if [ $x -eq 1 ]; then   echo "$1 already converted" else   echo converting $1 to UTF8   iconv -f "gb2312" -t "UTF-8" $1 -o $1 fi

Necesitamos evitar convertir dos veces para prevenir posibles problemas. El file -bi $1 | grep 'utf' | wc -lverificará si el archivo ya ha sido codificado en UTF-8. El comando iconv -f “gb2312" -t “UTF-8" $1 -o $1 convertirá el archivo a UTF-8 desde gb2132 (cámbielo según corresponda).

Ahora, podemos hacer un bucle de todos los archivos con extensiones de archivo *.php en el directorio actual y todos los subdirectorios:

for x in `find. -type f -name "*.php"`; do toUTF $x done

Convertir base de datos MySQL a UTF-8

En mi caso, toda mi base de datos mysql anterior está predeterminada en codificación ANSI (intercalación latin1_swedish_ci) y se corrompe en los navegadores modernos si hay caracteres GB2312 (multibyte). Por ejemplo, PhpMyAdmin tiene codificación UTF-8 y los caracteres ANSI/GB2312 se mostrarán corruptos en el navegador.

Para guardar estos datos en UTF-8, el método más sencillo es exportar la tabla (se recomienda phpMyAdmin) a un archivo SQL; asegúrese de exportarlo usando iso 8859-1 (cobertura completa de inglés). iso 8859-1 también se conoce como ANSI, pero los caracteres GB2312 se pueden almacenar como una cadena de varios bytes. Si abre el SQL en el bloc de notas, aún puede ver los caracteres chinos, solo necesita guardar como codificación ‘UTF-8’.

Cómo convertir GB2312 (u otros caracteres no ANSI) a codificación UTF-8 (tanto MySQL como Files Charset)

phpmyadmin

Oh, una cosa más antes de guardar como UTF-8. Debe buscar y reemplazar la palabra "latin1" por "utf-8" en el archivo SQL. Luego vuelva a importar el SQL usando phpMyAdmin para que esté listo. Todos los datos se conservarán y cambiarán a la codificación UTF-8 y la intercalación se cambiará (para varchar, texto, texto largo, etc.) a utf8_general_ci.

Configuración de MySQL UTF-8

En PHP, puede configurar el conjunto de caracteres predeterminado:

  mysql_query("SET NAMES 'utf8'");   mysql_query("SET CHARACTER SET utf8");

El mysql_set_charset hace algo similar:

También puede configurar el conjunto de caracteres predeterminado cuando se inicia el servidor MySQL (ahorre los gastos generales de función para llamar a las funciones anteriores). Vaya a editar el archivo /etc/mysql/my.cnf y reinicie el servidor mysql, por ejemplo , sudo service mysql restart. Agregue lo siguiente a my.cnf :

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8

¿Por qué UTF-8?

El UTF-8 trata letras alfabéticas de 1 byte (lo mismo que ANSI) pero usa 3 bytes para representar 1 carácter chino mientras que se usan 2 bytes si está codificado por GB2312. Por lo tanto, si sus páginas contienen muchos caracteres chinos, ANSI/GB2312 ahorra espacio; sin embargo, UTF-8 y ANSI consumen exactamente el mismo espacio cuando se trata de letras en inglés solamente.

El UTF-8 le ahorra problemas en el futuro. Una vez que convierte a UTF-8, no tiene que preocuparse por el conjunto de caracteres o la codificación. UTF-8 es más amigable con los caracteres internacionalmente que la mayoría de los navegadores saben cómo mostrar el texto correctamente. En mi caso, tengo que convertir los archivos a codificados en UTF-8 porque mis editores de texto favoritos, tanto PsPAD como Sublime text, no saben cómo mostrar ANSI/GB2312 correctamente.

Fuente de grabación: helloacm.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More