{"id":233016,"date":"2023-02-02T19:47:00","date_gmt":"2023-02-02T16:47:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233016"},"modified":"2022-11-10T18:46:08","modified_gmt":"2022-11-10T15:46:08","slug":"como-converter-gb2312-ou-outros-caracteres-nao-ansi-para-codificacao-utf-8-my-mysql-e-files-charset","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/como-converter-gb2312-ou-outros-caracteres-nao-ansi-para-codificacao-utf-8-my-mysql-e-files-charset\/","title":{"rendered":"Como converter GB2312 (ou outros caracteres n\u00e3o ANSI) para codifica\u00e7\u00e3o UTF-8 (My MySQL e Files Charset)"},"content":{"rendered":"\n<p>Meu primeiro site <a href=\"https:\/\/steakovercooked.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">steakovercooked.com<\/a> come\u00e7ou em 2006 (9 anos atr\u00e1s). E naquela \u00e9poca, eu n\u00e3o sabia muito sobre a codifica\u00e7\u00e3o\/charset de arquivos e tamb\u00e9m, o UTF-8 n\u00e3o era t\u00e3o popular para p\u00e1ginas da web naquela \u00e9poca. Atualmente, o UTF-8 se torna t\u00e3o popular, ou seja, o WordPress usa a codifica\u00e7\u00e3o UTF-8 em todo o site para que voc\u00ea possa exibir virtualmente qualquer idioma em um site sem 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=\"Como converter GB2312 (ou outros caracteres n\u00e3o ANSI) para codifica\u00e7\u00e3o UTF-8 (My MySQL e Files Charset)\" ><\/a><\/p>\n<p>UTF-8-ascii-iso-8859-1<\/p>\n<p>A p\u00e1gina de c\u00f3digo de todos os arquivos (PHP, HTML, CSS e alguns outros arquivos de texto simples) estavam principalmente em p\u00e1ginas de c\u00f3digo ANSI e os caracteres chineses s\u00e3o codificados em v\u00e1rios bytes. Para exibir esses caracteres (em codifica\u00e7\u00e3o ANSI) no navegador, voc\u00ea precisaria coloc\u00e1-los entre a tag de cabe\u00e7alho em HTML para que os navegadores possam entender:<\/p>\n<pre><code>&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=gb2312\"&gt;<\/code><\/pre>\n<p>Em HTML5, voc\u00ea pode escrever em um m\u00e9todo muito mais curto:<\/p>\n<pre><code>&lt;meta charset=\"gb2312\"&gt;<\/code><\/pre>\n<p>Portanto, a maioria dos falantes n\u00e3o chineses n\u00e3o podem ver os caracteres, a menos que instalem o pacote de idioma GB2312 para o navegador. Al\u00e9m disso, \u00e9 prov\u00e1vel que alguns editores de texto comuns estraguem os caracteres. Um \u00fanico caractere em chin\u00eas tem dois bytes, mas \u00e0s vezes o editor de texto apenas corta ao meio.<\/p>\n<h3>Converter arquivos (ANSI) para UTF-8<\/h3>\n<p>Antes de alterar o meta-cabe\u00e7alho para:<\/p>\n<pre><code>&lt;meta charset=\"utf-8\"&gt;<\/code><\/pre>\n<p>Voc\u00ea precisaria converter os arquivos em codifica\u00e7\u00e3o UTF-8. H\u00e1 muitas maneiras de fazer isso. O m\u00e9todo mais simples seria usar o bloco de notas para salvar como codifica\u00e7\u00e3o &#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=\"Como converter GB2312 (ou outros caracteres n\u00e3o ANSI) para codifica\u00e7\u00e3o UTF-8 (My MySQL e Files Charset)\" ><\/a><\/p>\n<p>bloco de notas-converter-para-utf-8<\/p>\n<p>Se voc\u00ea tiver muitos arquivos, poder\u00e1 fazer isso usando o utilit\u00e1rio <strong>iconv<\/strong> no Linux (<a href=\"https:\/\/helloacm.com\/site-news-vps-upgraded-again-to-handle-large-traffic\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">VPS Server<\/a> ). O script a seguir (salvo no nome do arquivo, por exemplo, toUTF) converter\u00e1 um \u00fanico arquivo em 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>Precisamos evitar converter duas vezes para evitar poss\u00edveis problemas. O <strong><code>file -bi $1 | grep 'utf' | wc -l<\/code><\/strong>ir\u00e1 verificar se o arquivo j\u00e1 foi codificado em UTF-8. O comando <strong>iconv -f &#8220;gb2312&quot; -t &#8220;UTF-8&quot; $1 -o $1<\/strong> converter\u00e1 o arquivo para UTF-8 de gb2132 (altere isso de acordo).<\/p>\n<p>Agora, podemos fazer um loop de todos os arquivos com extens\u00f5es de arquivo *.php no diret\u00f3rio atual e em todos os subdiret\u00f3rios:<\/p>\n<pre><code>for x in `find. -type f -name \"*.php\"`; do\n   toUTF $x\ndone    <\/code><\/pre>\n<h3>Converter banco de dados MySQL para UTF-8<\/h3>\n<p>No meu caso, todos os meus bancos de dados mysql anteriores s\u00e3o padronizados para a codifica\u00e7\u00e3o ANSI (collation <strong>latin1_swedish_ci<\/strong>) ele fica corrompido nos navegadores modernos se houver caracteres GB2312 (multi byte). Por exemplo, PhpMyAdmin tem codifica\u00e7\u00e3o UTF-8 e os caracteres ANSI\/GB2312 ser\u00e3o mostrados corrompidos no navegador.<\/p>\n<p>Para salvar esses dados em UTF-8, o m\u00e9todo mais f\u00e1cil \u00e9 exportar a tabela (recomenda-se o phpMyAdmin) para um arquivo SQL; certifique-se de export\u00e1-lo usando <strong>iso 8859-1<\/strong> (cobertura completa do ingl\u00eas). <strong>iso 8859-1<\/strong> tamb\u00e9m \u00e9 conhecido como ANSI, mas os caracteres GB2312 podem ser armazenados como string de v\u00e1rios bytes. Se voc\u00ea abrir o SQL no bloco de notas, ainda poder\u00e1 ver os caracteres chineses, basta salvar como codifica\u00e7\u00e3o &#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=\"Como converter GB2312 (ou outros caracteres n\u00e3o ANSI) para codifica\u00e7\u00e3o UTF-8 (My MySQL e Files Charset)\" ><\/a><\/p>\n<p>phpmyadmin<\/p>\n<p>Ah, mais uma coisa antes de salvar como UTF-8. Voc\u00ea deve pesquisar e substituir a palavra &#8220;latin1&#8221; por &#8220;utf-8&#8221; no arquivo SQL. Em seguida, reimporte o SQL usando o phpMyAdmin para que voc\u00ea esteja pronto. Todos os dados ser\u00e3o preservados e alterados para a codifica\u00e7\u00e3o UTF-8 e o agrupamento ser\u00e1 alterado (para varchar, text, longtext etc) para <strong>utf8_general_ci<\/strong>.<\/p>\n<h3>Configura\u00e7\u00f5es do MySQL UTF-8<\/h3>\n<p>No PHP, voc\u00ea pode definir o conjunto de caracteres padr\u00e3o:<\/p>\n<pre><code>\u00a0 mysql_query(\"SET NAMES 'utf8'\");\n\u00a0 mysql_query(\"SET CHARACTER SET utf8\");<\/code><\/pre>\n<p>O <strong>mysql_set_charset<\/strong> faz o mesmo:<\/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>Voc\u00ea tamb\u00e9m pode definir o conjunto de caracteres padr\u00e3o quando o servidor MySQL iniciar (salve as sobrecargas de fun\u00e7\u00e3o para chamar as fun\u00e7\u00f5es acima). V\u00e1 para editar o arquivo <strong>\/etc\/mysql\/my.cnf<\/strong> e reinicie o servidor mysql, por exemplo <strong>, sudo service mysql restart<\/strong>. Adicione o seguinte 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>Por que UTF-8?<\/h3>\n<p>O UTF-8 trata letras alfab\u00e9ticas de 1 byte (o mesmo que ANSI), mas usa 3 bytes para representar 1 caractere chin\u00eas enquanto 2 bytes s\u00e3o usados \u200b\u200bse codificados por GB2312. Portanto, se suas p\u00e1ginas contiverem muitos caracteres chineses, o ANSI\/GB2312 economizar\u00e1 espa\u00e7o, no entanto, UTF-8 e ANSI consumir\u00e3o exatamente o mesmo espa\u00e7o quando se trata apenas de letras em ingl\u00eas.<\/p>\n<p>O UTF-8 evita problemas no futuro. Depois de converter para UTF-8, voc\u00ea n\u00e3o precisa se preocupar com o conjunto de caracteres ou a codifica\u00e7\u00e3o. UTF-8 \u00e9 mais internacionalmente amig\u00e1vel com caracteres que a maioria dos navegadores sabe como exibir o texto corretamente. No meu caso, tenho que converter os arquivos em codificados em UTF-8 porque meus editores de texto favoritos, tanto o PsPAD quanto o texto Sublime, n\u00e3o sabem como exibir o ANSI\/GB2312 corretamente.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como converter GB2312 (ou outros caracteres n\u00e3o ANSI) para codifica\u00e7\u00e3o UTF-8 (My MySQL e 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":[898,753,722,837,920,846,867],"tags":[1170],"class_list":["post-233016","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-codigo-aberto","category-desenvolvedor","category-guia-para-iniciantes","category-outro","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=233016"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233016\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/224526"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}