✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak przekonwertować GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zarówno MySQL, jak i pliki Charset)

24

Moja pierwsza strona steakovercooked.com powstała w 2006 roku (9 lat temu). W tamtym czasie nie wiedziałem zbyt wiele o kodowaniu plików/zestawie znaków, a także UTF-8 nie był wtedy tak popularny na stronach internetowych. W dzisiejszych czasach UTF-8 staje się tak popularny, że WordPress używa kodowania UTF-8 w całej witrynie, dzięki czemu można bez problemu wyświetlać praktycznie dowolny język w jednej witrynie.

Jak przekonwertować GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zarówno MySQL, jak i pliki Charset)

UTF-8-ascii-izo-8859-1

Strona kodowa wszystkich plików (PHP, HTML, CSS i kilka innych plików tekstowych) była w większości na stronach kodowych ANSI, a chińskie znaki są zakodowane wielobajtowo. Aby wyświetlić te znaki (w kodowaniu ANSI) w przeglądarce, musisz umieścić je między tagiem nagłówka w HTML, aby przeglądarki mogły zrozumieć:

W HTML5 możesz pisać znacznie krótszą metodą:

Tak więc większość użytkowników spoza Chin nie widzi znaków, chyba że zainstalują pakiet językowy GB2312 dla przeglądarki. Ponadto jest prawdopodobne, że niektórzy zwykli edytorzy tekstu zepsują znaki. Pojedynczy znak w języku chińskim to dwa bajty, ale czasami edytor tekstu po prostu tnie na połówki.

Konwertuj pliki (ANSI) na UTF-8

Zanim zmienisz meta nagłówek na :

Musisz przekonwertować pliki na kodowanie UTF-8. Jest na to wiele sposobów. Najprostszą metodą byłoby użycie notatnika do zapisania jako kodowanie „UTF-8".

Jak przekonwertować GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zarówno MySQL, jak i pliki Charset)

notatnik-konwertuj-do-utf-8

Jeśli masz dużo plików, możesz to zrobić za pomocą narzędzia iconv w systemie Linux (serwer VPS ). Poniższy skrypt (zapisany do nazwy pliku np. toUTF) skonwertuje pojedynczy plik do 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

Musimy unikać dwukrotnej konwersji, aby zapobiec możliwym problemom. file -bi $1 | grep 'utf' | wc -lSprawdzi, czy plik został już zakodowany w UTF-8. Polecenie iconv -f “gb2312" -t “UTF-8” $1 -o $1 przekonwertuje plik na UTF-8 z gb2132 (zmień to odpowiednio).

Teraz możemy zapętlić wszystkie pliki z rozszerzeniem *.php w bieżącym katalogu i wszystkich podkatalogach:

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

Konwertuj bazę danych MySQL na UTF-8

W moim przypadku wszystkie moje poprzednie bazy danych mysql mają domyślnie kodowanie ANSI (porównanie latin1_swedish_ci ), które są uszkodzone w nowoczesnych przeglądarkach, jeśli istnieją znaki GB2312 (wielobajtowe). Na przykład PhpMyAdmin ma kodowanie UTF-8, a znaki ANSI/GB2312 będą wyświetlane w przeglądarce jako uszkodzone.

Aby zapisać te dane w UTF-8, najłatwiejszą metodą jest wyeksportowanie tabeli (zalecane phpMyAdmin) do pliku SQL; upewnij się, że eksportujesz go za pomocą ISO 8859-1 (pełne pokrycie języka angielskiego). iso 8859-1 jest również znany jako ANSI, ale znaki GB2312 mogą być przechowywane jako ciąg wielobajtowy. Jeśli otworzysz SQL w notatniku, nadal możesz zobaczyć chińskie znaki, wystarczy zapisać jako kodowanie „UTF-8″.

Jak przekonwertować GB2312 (lub inne znaki spoza ANSI) na kodowanie UTF-8 (zarówno MySQL, jak i pliki Charset)

phpmyadmin

Och, jeszcze jedna rzecz przed zapisaniem jako UTF-8. Należy wyszukać i zamienić słowo „latin1″ na „utf-8″ w pliku SQL. Następnie ponownie zaimportuj SQL za pomocą phpMyAdmin, więc jesteś gotowy do pracy. Wszystkie dane zostaną zachowane i zmienione na kodowanie UTF-8, a sortowanie zostanie zmienione (dla varchar, text, longtext itp.) na utf8_general_ci.

Ustawienia MySQL UTF-8

W PHP możesz ustawić domyślny zestaw znaków:

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

Podobnie działa mysql_set_charset :

Możesz także ustawić domyślny zestaw znaków podczas uruchamiania serwera MySQL (zapisz narzuty funkcji dla wywołania powyższych funkcji). Przejdź do edycji pliku /etc/mysql/my.cnf i zrestartuj serwer mysql np. sudo service mysql restart. Dodaj następujące elementy do 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

Dlaczego UTF-8?

UTF-8 traktuje litery alfabetu 1 bajt (tak samo jak ANSI), ale używa 3 bajtów do reprezentowania 1 chińskiego znaku, podczas gdy 2 bajty są używane, jeśli są zakodowane przez GB2312. Dlatego też, jeśli twoje strony zawierają dużo chińskich znaków, ANSI/GB2312 oszczędza miejsce, jednak UTF-8 i ANSI zajmują dokładnie tę samą przestrzeń, jeśli chodzi tylko o litery angielskie.

UTF-8 oszczędza kłopotów w przyszłości. Po konwersji do UTF-8 nie musisz się martwić o zestaw znaków lub kodowanie. UTF-8 jest bardziej przyjazny dla znaków międzynarodowych, niż większość przeglądarek wie, jak poprawnie wyświetlać tekst. W moim przypadku muszę przekonwertować pliki na kodowanie UTF-8, ponieważ moje ulubione edytory tekstu, zarówno PsPAD, jak i Sublime text, nie wiedzą, jak poprawnie wyświetlić ANSI/GB2312.

Źródło nagrywania: helloacm.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów