{"id":233015,"date":"2023-02-02T19:15:00","date_gmt":"2023-02-02T16:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233015"},"modified":"2022-11-10T18:46:00","modified_gmt":"2022-11-10T15:46:00","slug":"jak-przekonwertowac-gb2312-lub-inne-znaki-spoza-ansi-na-kodowanie-utf-8-zarowno-mysql-jak-i-pliki-charset","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-przekonwertowac-gb2312-lub-inne-znaki-spoza-ansi-na-kodowanie-utf-8-zarowno-mysql-jak-i-pliki-charset\/","title":{"rendered":"Jak przekonwertowa\u0107 GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zar\u00f3wno MySQL, jak i pliki Charset)"},"content":{"rendered":"\n<p>Moja pierwsza strona <a href=\"https:\/\/steakovercooked.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">steakovercooked.com<\/a> powsta\u0142a w 2006 roku (9 lat temu). W tamtym czasie nie wiedzia\u0142em zbyt wiele o kodowaniu plik\u00f3w\/zestawie znak\u00f3w, a tak\u017ce UTF-8 nie by\u0142 wtedy tak popularny na stronach internetowych. W dzisiejszych czasach UTF-8 staje si\u0119 tak popularny, \u017ce WordPress u\u017cywa kodowania UTF-8 w ca\u0142ej witrynie, dzi\u0119ki czemu mo\u017cna bez problemu wy\u015bwietla\u0107 praktycznie dowolny j\u0119zyk w jednej witrynie.<\/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=\"Jak przekonwertowa\u0107 GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zar\u00f3wno MySQL, jak i pliki Charset)\" ><\/a><\/p>\n<p>UTF-8-ascii-izo-8859-1<\/p>\n<p>Strona kodowa wszystkich plik\u00f3w (PHP, HTML, CSS i kilka innych plik\u00f3w tekstowych) by\u0142a w wi\u0119kszo\u015bci na stronach kodowych ANSI, a chi\u0144skie znaki s\u0105 zakodowane wielobajtowo. Aby wy\u015bwietli\u0107 te znaki (w kodowaniu ANSI) w przegl\u0105darce, musisz umie\u015bci\u0107 je mi\u0119dzy tagiem nag\u0142\u00f3wka w HTML, aby przegl\u0105darki mog\u0142y zrozumie\u0107:<\/p>\n<pre><code>&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=gb2312\"&gt;<\/code><\/pre>\n<p>W HTML5 mo\u017cesz pisa\u0107 znacznie kr\u00f3tsz\u0105 metod\u0105:<\/p>\n<pre><code>&lt;meta charset=\"gb2312\"&gt;<\/code><\/pre>\n<p>Tak wi\u0119c wi\u0119kszo\u015b\u0107 u\u017cytkownik\u00f3w spoza Chin nie widzi znak\u00f3w, chyba \u017ce zainstaluj\u0105 pakiet j\u0119zykowy GB2312 dla przegl\u0105darki. Ponadto jest prawdopodobne, \u017ce niekt\u00f3rzy zwykli edytorzy tekstu zepsuj\u0105 znaki. Pojedynczy znak w j\u0119zyku chi\u0144skim to dwa bajty, ale czasami edytor tekstu po prostu tnie na po\u0142\u00f3wki.<\/p>\n<h3>Konwertuj pliki (ANSI) na UTF-8<\/h3>\n<p>Zanim zmienisz meta nag\u0142\u00f3wek na :<\/p>\n<pre><code>&lt;meta charset=\"utf-8\"&gt;<\/code><\/pre>\n<p>Musisz przekonwertowa\u0107 pliki na kodowanie UTF-8. Jest na to wiele sposob\u00f3w. Najprostsz\u0105 metod\u0105 by\u0142oby u\u017cycie notatnika do zapisania jako kodowanie \u201eUTF-8&quot;.<\/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=\"Jak przekonwertowa\u0107 GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zar\u00f3wno MySQL, jak i pliki Charset)\" ><\/a><\/p>\n<p>notatnik-konwertuj-do-utf-8<\/p>\n<p>Je\u015bli masz du\u017co plik\u00f3w, mo\u017cesz to zrobi\u0107 za pomoc\u0105 narz\u0119dzia <strong>iconv<\/strong> w systemie Linux (<a href=\"https:\/\/helloacm.com\/site-news-vps-upgraded-again-to-handle-large-traffic\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">serwer VPS<\/a> ). Poni\u017cszy skrypt (zapisany do nazwy pliku np. toUTF) skonwertuje pojedynczy plik do 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>Musimy unika\u0107 dwukrotnej konwersji, aby zapobiec mo\u017cliwym problemom. <strong><code>file -bi $1 | grep 'utf' | wc -l<\/code><\/strong>Sprawdzi, czy plik zosta\u0142 ju\u017c zakodowany w UTF-8. Polecenie <strong>iconv -f &#8222;gb2312&quot; -t &#8222;UTF-8&#8221; $1 -o $1<\/strong> przekonwertuje plik na UTF-8 z gb2132 (zmie\u0144 to odpowiednio).<\/p>\n<p>Teraz mo\u017cemy zap\u0119tli\u0107 wszystkie pliki z rozszerzeniem *.php w bie\u017c\u0105cym katalogu i wszystkich podkatalogach:<\/p>\n<pre><code>for x in `find. -type f -name \"*.php\"`; do\n   toUTF $x\ndone    <\/code><\/pre>\n<h3>Konwertuj baz\u0119 danych MySQL na UTF-8<\/h3>\n<p>W moim przypadku wszystkie moje poprzednie bazy danych mysql maj\u0105 domy\u015blnie kodowanie ANSI (<strong>por\u00f3wnanie latin1_swedish_ci<\/strong> ), kt\u00f3re s\u0105 uszkodzone w nowoczesnych przegl\u0105darkach, je\u015bli istniej\u0105 znaki GB2312 (wielobajtowe). Na przyk\u0142ad PhpMyAdmin ma kodowanie UTF-8, a znaki ANSI\/GB2312 b\u0119d\u0105 wy\u015bwietlane w przegl\u0105darce jako uszkodzone.<\/p>\n<p>Aby zapisa\u0107 te dane w UTF-8, naj\u0142atwiejsz\u0105 metod\u0105 jest wyeksportowanie tabeli (zalecane phpMyAdmin) do pliku SQL; upewnij si\u0119, \u017ce eksportujesz go za pomoc\u0105 <strong>ISO 8859-1<\/strong> (pe\u0142ne pokrycie j\u0119zyka angielskiego). <strong>iso 8859-1<\/strong> jest r\u00f3wnie\u017c znany jako ANSI, ale znaki GB2312 mog\u0105 by\u0107 przechowywane jako ci\u0105g wielobajtowy. Je\u015bli otworzysz SQL w notatniku, nadal mo\u017cesz zobaczy\u0107 chi\u0144skie znaki, wystarczy zapisa\u0107 jako kodowanie \u201eUTF-8&#8243;.<\/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=\"Jak przekonwertowa\u0107 GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zar\u00f3wno MySQL, jak i pliki Charset)\" ><\/a><\/p>\n<p>phpmyadmin<\/p>\n<p>Och, jeszcze jedna rzecz przed zapisaniem jako UTF-8. Nale\u017cy wyszuka\u0107 i zamieni\u0107 s\u0142owo \u201elatin1&#8243; na \u201eutf-8&#8243; w pliku SQL. Nast\u0119pnie ponownie zaimportuj SQL za pomoc\u0105 phpMyAdmin, wi\u0119c jeste\u015b gotowy do pracy. Wszystkie dane zostan\u0105 zachowane i zmienione na kodowanie UTF-8, a sortowanie zostanie zmienione (dla varchar, text, longtext itp.) na <strong>utf8_general_ci<\/strong>.<\/p>\n<h3>Ustawienia MySQL UTF-8<\/h3>\n<p>W PHP mo\u017cesz ustawi\u0107 domy\u015blny zestaw znak\u00f3w:<\/p>\n<pre><code>\u00a0 mysql_query(\"SET NAMES 'utf8'\");\n\u00a0 mysql_query(\"SET CHARACTER SET utf8\");<\/code><\/pre>\n<p>Podobnie dzia\u0142a <strong>mysql_set_charset :<\/strong><\/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>Mo\u017cesz tak\u017ce ustawi\u0107 domy\u015blny zestaw znak\u00f3w podczas uruchamiania serwera MySQL (zapisz narzuty funkcji dla wywo\u0142ania powy\u017cszych funkcji). Przejd\u017a do edycji pliku <strong>\/etc\/mysql\/my.cnf<\/strong> i zrestartuj serwer mysql np. <strong>sudo service mysql restart<\/strong>. Dodaj nast\u0119puj\u0105ce elementy do <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>Dlaczego UTF-8?<\/h3>\n<p>UTF-8 traktuje litery alfabetu 1 bajt (tak samo jak ANSI), ale u\u017cywa 3 bajt\u00f3w do reprezentowania 1 chi\u0144skiego znaku, podczas gdy 2 bajty s\u0105 u\u017cywane, je\u015bli s\u0105 zakodowane przez GB2312. Dlatego te\u017c, je\u015bli twoje strony zawieraj\u0105 du\u017co chi\u0144skich znak\u00f3w, ANSI\/GB2312 oszcz\u0119dza miejsce, jednak UTF-8 i ANSI zajmuj\u0105 dok\u0142adnie t\u0119 sam\u0105 przestrze\u0144, je\u015bli chodzi tylko o litery angielskie.<\/p>\n<p>UTF-8 oszcz\u0119dza k\u0142opot\u00f3w w przysz\u0142o\u015bci. Po konwersji do UTF-8 nie musisz si\u0119 martwi\u0107 o zestaw znak\u00f3w lub kodowanie. UTF-8 jest bardziej przyjazny dla znak\u00f3w mi\u0119dzynarodowych, ni\u017c wi\u0119kszo\u015b\u0107 przegl\u0105darek wie, jak poprawnie wy\u015bwietla\u0107 tekst. W moim przypadku musz\u0119 przekonwertowa\u0107 pliki na kodowanie UTF-8, poniewa\u017c moje ulubione edytory tekstu, zar\u00f3wno PsPAD, jak i Sublime text, nie wiedz\u0105, jak poprawnie wy\u015bwietli\u0107 ANSI\/GB2312.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak przekonwertowa\u0107 GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zar\u00f3wno MySQL, jak i pliki 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":[721,919,897,752,836,845,866],"tags":[1169],"class_list":["post-233015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-otwarte-zrodlo","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233015"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224526"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}