{"id":233000,"date":"2023-02-02T19:27:00","date_gmt":"2023-02-02T16:27:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233000"},"modified":"2022-11-10T18:42:25","modified_gmt":"2022-11-10T15:42:25","slug":"como-convertir-gb2312-u-otros-caracteres-no-ansi-a-codificacion-utf-8-tanto-mysql-como-files-charset","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-convertir-gb2312-u-otros-caracteres-no-ansi-a-codificacion-utf-8-tanto-mysql-como-files-charset\/","title":{"rendered":"C\u00f3mo convertir GB2312 (u otros caracteres no ANSI) a codificaci\u00f3n UTF-8 (tanto MySQL como Files Charset)"},"content":{"rendered":"\n<p>Mi primer sitio web, <a href=\"https:\/\/steakovercooked.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">steakovercooked.com<\/a>, comenz\u00f3 en 2006 (hace 9 a\u00f1os). Y en ese momento, no sab\u00eda mucho sobre la codificaci\u00f3n de archivos\/conjunto de caracteres y, adem\u00e1s, el UTF-8 no era tan popular para las p\u00e1ginas web en ese momento. En estos d\u00edas, UTF-8 se vuelve tan popular, es decir, WordPress usa la codificaci\u00f3n UTF-8 en todo el sitio para que pueda mostrar pr\u00e1cticamente cualquier idioma en un sitio sin problemas.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155185-61e5574685d46.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155185-61e5574685d46.jpg\" alt=\"C\u00f3mo convertir GB2312 (u otros caracteres no ANSI) a codificaci\u00f3n UTF-8 (tanto MySQL como Files Charset)\" ><\/a><\/p>\n<p>UTF-8-ascii-iso-8859-1<\/p>\n<p>La p\u00e1gina de c\u00f3digos de todos los archivos (PHP, HTML, CSS y algunos otros archivos de texto sin formato), estaban en su mayor\u00eda en p\u00e1ginas de c\u00f3digos ANSI y los caracteres chinos est\u00e1n codificados en varios bytes. Para mostrar estos caracteres (en codificaci\u00f3n ANSI) en el navegador, debe colocarlos entre la etiqueta del encabezado en HTML para que los navegadores puedan entender:<\/p>\n<pre><code>&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=gb2312\"&gt;<\/code><\/pre>\n<p>En HTML5, puede escribir en un m\u00e9todo mucho m\u00e1s corto:<\/p>\n<pre><code>&lt;meta charset=\"gb2312\"&gt;<\/code><\/pre>\n<p>Por lo tanto, la mayor\u00eda de los que no hablan chino no pueden ver los caracteres a menos que instalen el paquete de idioma GB2312 para el navegador. Adem\u00e1s, es probable que algunos editores de texto comunes se equivoquen con los caracteres. Un solo car\u00e1cter en chino son dos bytes, pero a veces el editor de texto simplemente lo corta por la mitad.<\/p>\n<h3>Convertir archivos (ANSI) a UTF-8<\/h3>\n<p>Antes de cambiar el meta encabezado a:<\/p>\n<pre><code>&lt;meta charset=\"utf-8\"&gt;<\/code><\/pre>\n<p>Deber\u00e1 convertir los archivos a la codificaci\u00f3n UTF-8. Hay muchas maneras de hacer eso. El m\u00e9todo m\u00e1s simple ser\u00eda usar el bloc de notas para guardar como codificaci\u00f3n &#8216;UTF-8&#8217;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155185-61e55747b5a84.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155185-61e55747b5a84.jpg\" alt=\"C\u00f3mo convertir GB2312 (u otros caracteres no ANSI) a codificaci\u00f3n UTF-8 (tanto MySQL como Files Charset)\" ><\/a><\/p>\n<p>bloc de notas-convertir-a-utf-8<\/p>\n<p>Si tiene muchos archivos, puede hacerlo usando la utilidad <strong>iconv<\/strong> en Linux (<a href=\"https:\/\/helloacm.com\/site-news-vps-upgraded-again-to-handle-large-traffic\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Servidor VPS<\/a> ). El siguiente script (guardado en el nombre de archivo, por ejemplo, toUTF) convertir\u00e1 un solo archivo a UTF-8.<\/p>\n<pre><code>#!\/bin\/bash\n# https:\/\/helloacm.com\n\u00a0\nif [ \"$#\" -ne 1 ] ||! [ -r \"$1\" ]; then\n\u00a0 \u00a0 echo \"Usage: $0 file1\"\n\u00a0 \u00a0 exit 1\nfi\n\u00a0\nx=`file -bi $1 | grep 'utf' | wc -l`\nif [ $x -eq 1 ]; then\n\u00a0 echo \"$1 already converted\"\nelse\n\u00a0 echo converting $1 to UTF8\n\u00a0 iconv -f \"gb2312\" -t \"UTF-8\" $1 -o $1\nfi<\/code><\/pre>\n<p>Necesitamos evitar convertir dos veces para prevenir posibles problemas. El <strong><code>file -bi $1 | grep 'utf' | wc -l<\/code><\/strong>verificar\u00e1 si el archivo ya ha sido codificado en UTF-8. El comando <strong>iconv -f \u00abgb2312&quot; -t \u00abUTF-8&quot; $1 -o $1<\/strong> convertir\u00e1 el archivo a UTF-8 desde gb2132 (c\u00e1mbielo seg\u00fan corresponda).<\/p>\n<p>Ahora, podemos hacer un bucle de todos los archivos con extensiones de archivo *.php en el directorio actual y todos los subdirectorios:<\/p>\n<pre><code>for x in `find. -type f -name \"*.php\"`; do\n   toUTF $x\ndone    <\/code><\/pre>\n<h3>Convertir base de datos MySQL a UTF-8<\/h3>\n<p>En mi caso, toda mi base de datos mysql anterior est\u00e1 predeterminada en codificaci\u00f3n ANSI (intercalaci\u00f3n <strong>latin1_swedish_ci<\/strong>) y se corrompe en los navegadores modernos si hay caracteres GB2312 (multibyte). Por ejemplo, PhpMyAdmin tiene codificaci\u00f3n UTF-8 y los caracteres ANSI\/GB2312 se mostrar\u00e1n corruptos en el navegador.<\/p>\n<p>Para guardar estos datos en UTF-8, el m\u00e9todo m\u00e1s sencillo es exportar la tabla (se recomienda phpMyAdmin) a un archivo SQL; aseg\u00farese de exportarlo usando <strong>iso 8859-1<\/strong> (cobertura completa de ingl\u00e9s). <strong>iso 8859-1<\/strong> tambi\u00e9n 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\u00fan puede ver los caracteres chinos, solo necesita guardar como codificaci\u00f3n &#8216;UTF-8&#8217;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155185-61e55748eff91.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155185-61e55748eff91.jpg\" alt=\"C\u00f3mo convertir GB2312 (u otros caracteres no ANSI) a codificaci\u00f3n UTF-8 (tanto MySQL como Files Charset)\" ><\/a><\/p>\n<p>phpmyadmin<\/p>\n<p>Oh, una cosa m\u00e1s antes de guardar como UTF-8. Debe buscar y reemplazar la palabra &quot;latin1&quot; por &quot;utf-8&quot; en el archivo SQL. Luego vuelva a importar el SQL usando phpMyAdmin para que est\u00e9 listo. Todos los datos se conservar\u00e1n y cambiar\u00e1n a la codificaci\u00f3n UTF-8 y la intercalaci\u00f3n se cambiar\u00e1 (para varchar, texto, texto largo, etc.) a <strong>utf8_general_ci<\/strong>.<\/p>\n<h3>Configuraci\u00f3n de MySQL UTF-8<\/h3>\n<p>En PHP, puede configurar el conjunto de caracteres predeterminado:<\/p>\n<pre><code>\u00a0 mysql_query(\"SET NAMES 'utf8'\");\n\u00a0 mysql_query(\"SET CHARACTER SET utf8\");<\/code><\/pre>\n<p>El <strong>mysql_set_charset<\/strong> hace algo similar:<\/p>\n<pre><code>if (!function_exists('mysql_set_charset')) {\n\u00a0 function mysql_set_charset($charset, $dbh)\n\u00a0 {\n\u00a0 \u00a0 return mysql_query(\"set names $charset\", $dbh);\n\u00a0 }\n}\n\/\/ mysql_set_charset \u2014 Sets the client character set\nmysql_set_charset(\"utf-8\", $link); \/\/(PHP 5 &gt;= 5.2.3) <\/code><\/pre>\n<p>Tambi\u00e9n puede configurar el conjunto de caracteres predeterminado cuando se inicia el servidor MySQL (ahorre los gastos generales de funci\u00f3n para llamar a las funciones anteriores). Vaya a editar el archivo <strong>\/etc\/mysql\/my.cnf<\/strong> y reinicie el servidor mysql, por ejemplo <strong>, sudo service mysql restart<\/strong>. Agregue lo siguiente a <strong>my.cnf<\/strong> :<\/p>\n<pre><code>[client]\ndefault-character-set=utf8\n\n[mysql]\ndefault-character-set=utf8\n\n[mysqld]\ncollation-server = utf8_unicode_ci\ninit-connect='SET NAMES utf8'\ncharacter-set-server = utf8<\/code><\/pre>\n<h3>\u00bfPor qu\u00e9 UTF-8?<\/h3>\n<p>El UTF-8 trata letras alfab\u00e9ticas de 1 byte (lo mismo que ANSI) pero usa 3 bytes para representar 1 car\u00e1cter chino mientras que se usan 2 bytes si est\u00e1 codificado por GB2312. Por lo tanto, si sus p\u00e1ginas 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\u00e9s solamente.<\/p>\n<p>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\u00f3n. UTF-8 es m\u00e1s amigable con los caracteres internacionalmente que la mayor\u00eda de los navegadores saben c\u00f3mo 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\u00f3mo mostrar ANSI\/GB2312 correctamente.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo convertir GB2312 (u otros caracteres no ANSI) a codificaci\u00f3n UTF-8 (tanto MySQL como Files Charset)<\/p>\n","protected":false},"author":1,"featured_media":224526,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,747,831,914,840,861],"tags":[1172],"class_list":["post-233000","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-guia-para-principiantes","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233000","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233000"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233000\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/224526"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}