PDA

Zobacz pełną wersję : Raz jeszcze kodowanie znaków - znaki zapytania na nowym serwerze



andrzejj9
23-08-2006, 11:47
Wiem, że tematów takich było już dużo. Przejrzałem wszystkie (albo prawie wszystkie), ale pomimo różnych prób moich, jak również admina serwera, nie udało mi się do tej pory zlikwidować znaków zapytania wyświetlających się zamiast polskich liter. Kończy mi się okres próbny, na który wykupiłem serwer i chciałbym ostatecznie sprawdzić, czy da się z tym coś zrobić, czy po prostu tutaj to nie będzie działać.


Po kolei, na starym serwerze były takie ustawienia:

System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_unicode_ci
Metoda porównywania napisów dla tabel: latin1_swedish_ci

Bazę eksportowałem z poziomu phpmyadmin (chciałem spróbować innym programem, ale dowiedziałem się od admina tego serwera, że nie jest możliwa obsługa tej bazy programami zewnętrznymi). Tak samo importowałem na nowy serwer próbując różnych ustawień przy imporcie. Ostatecznie zostawiłem utf8, ale to też nic nie daje.

Obecnie ustawienia na nowym serwerze są analogiczne, jak na starym.


Jednocześnie próbowałem zmienić metodę porównywania napisów z latin1 na latin2_general_ci, ale to również nic nie dało. Zarówno jak robiłem to na starym serwerze i potem importowałem, jak i jeśli próbowałem już wszystko robić na nowym. Zastanawia mnie też, czy wystarczy zmiana dla całej tabeli (poprzez operacje), czy trzeba dodatkowo zmieniać osobno dla każdego pola tabeli? (poprzez jego zaznaczenie i opcję - Zmień) Próbowałem jednak tak i tak (chociaż drugą metodą jedynie dla wybranych tabel, bo jest z tym bardzo dużo roboty), ale również nic się nie zmieniło.



Linia dotycząca kodowania znaków w index.php jest następująca:

<meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" />

Pytałem już o to wcześniej i podobno jest prawidłowa. Podobnie jeśli chodzi o templatkę sprawdzałem wcześniej wszystko i ustawienia są prawidłowe.


Polskie napisy nie pojawiają się zarówno w starych artykułach, jak i nowo dodanych już na nowym serwerze.



Pisałem w tej sprawie do admina nowego serwera. Listów było kilka, ale najważniejsze instrukcję przedstawię poniżej:


Kodowanie moze Pan zmienic poleceniem iconv pod Linuxem. Niestety, nie
wiem czym mozna je zmienic pod Windowsem. Najprosciej byloby gdyby
mial Pan mozliwosc na starym serwerze wykonac zrzut z takim kodowaniem
jakie maja tabele tzn. jezeli tabele maja kodowanie latin1 a dane byly
trzymane np. w utf8 to zrobienie zrzutu z kodowaniem latin1 spowoduje,
ze bedzie mial Pan dane w utf8. Jezeli wykonuje Pan zrzut z innym
kodowaniem to dane sa blednie przekodowywane z kodowania tabel do
kodowania klient i wychodza takie krzaczki. Prosze moze poprosic
administratora starego serwera aby wykonal Panu poprawny zrzut. W
innym wypadku trzeba bedzie wykonac operacje odwrotna tzn. jezeli
zrzut byl wykonany z kodowaniem np. utf8 to przekodowanie z utf8 do
kodowania tabel np. latin1 powinno dac dane w takim kodowaniu jak byly
w bazie (zakladam, ze w bazie mial Pan poprawne kodowanie). Nie zawsze
takie przekonwertowanie jest mozliwe i wtedy jedynym ratunkiem jest
wykonanie poprawnego zrzutu.


Co w takim razie powinienem zrobić? Próbowałem już chyba wszystkie możliwe kombinacje exportu i importu i jedyna różnica, to że czasami są tylko znaki zapytania, a czasami dochodzą jeszcze dodatkowe krzaczki. Polskich liter nie udało mi się uzyskać. Jedynie "ó" wyświetla się prawidłowo. Czy problemem mogą być jakieś ustawienia na starym serwerze (www.ovh.org), które może zrobiły coś z kodowaniem tak, że nie da się już tego naprawić, czy może coś na nowym i admin innego by sobie poradził (teraz próbowałem na www.nazwa.pl , ale zastanawiałem się także na home.pl i progreso, więc mogę ewentualnie się tam przenieść. Chociaż niezbyt chce mi się instalować Joomlę jeszcze raz od podstaw..).

Mógłby mi ktoś z tym pomóc, męczę się już prawie dwa tygodnie i musiałem przez to wstrzymać pracę nad stroną, którą chciałem prowadzić regularnie..

zwiastun
23-08-2006, 12:44
Najprostszy sposób poradzenia sobie z takim problemem:

1. Wyeksportuj odrębnie strukturę bazy danych i dane (dane ewentualnie w częściach, jeśli jest ich sporo)
2. Wczytaj dane do edytora rozpoznającego kodowanie lub posiadającego funkcję zmiany kodowania (np. Pajączek)
3. Wydaj polecenie: Zapisuj w kodowaniu => wybrane nowe kodowanie

Bywa, że i to nie poradzi.
Pozostaje wówczas metoda ręczna, niekiedy czasochłonna, ale na pewno starczy Ci jednego (i to niecałego dnia, a nie dwóch tygodni)

1. Przejrzyj zrzut danych. Wyszukaj wszystkie ciągi znaków odpowiadające polskim literkom. Przyjrzyj się im dokladnie (najlepiej wypisz wszystkie).
2. Ustal rozważnie rozsądną kolejność zamiany
3. Skorzystaj z narzędzia Znajdź i zamień w edytorze tekstu i zamień wszystkie zakodowane znaki na polskie odpowiedniki. Raczej nie korzystaj z funkcji Zamień wszystkie. Więcej czasu, ale mniej błędów. Zresztą zauważysz, że niekiedy można skorzystać z Zamień wszystkie, a niekiedy nie.
4. Po tych poprawkach zapisz zrzut w wybranym potrzebnym Ci kodowaniu
(ja zapisuję w ISO-8859-2, a do importu korzystam ze skryptu bigdump)

andrzejj9
23-08-2006, 12:56
Dziękuję za odpowiedź.

Zacznę od tej prostszej metody, mam nadzieję, że druga nie będzie konieczna.




Najprostszy sposób poradzenia sobie z takim problemem:

1. Wyeksportuj odrębnie strukturę bazy danych i dane (dane ewentualnie w częściach, jeśli jest ich sporo)


Nie jestem pewien, czy dobrze, to rozumiem, więc uściślę - mam to zrobić w taki sposób:

1) Strukturę baz danych - czyli eksport ze 'strony głównej' panelu phpmyadmin

2) Następnie dane już normalnie poprzez wejście do tabeli i funkcję eksport?

(cała baza zajmuje na razie ok.1MB, po spakowania ok. 200KB, więc na szczęście aż tak dużo tego jeszcze nie ma)




2. Wczytaj dane do edytora rozpoznającego kodowanie lub posiadającego funkcję zmiany kodowania (np. Pajączek)
3. Wydaj polecenie: Zapisuj w kodowaniu => wybrane nowe kodowanie


Jeszcze nie sprawdzałem, bo nie mam tego programu (poszukam jakiejś wersji demonstracyjnej wieczorem), ale czy wystarczy w tym celu otworzyć ten plik z danymi z drugiego podpuntku przed chwilą, a potem zapisać go w nowy sposób?

zwiastun
23-08-2006, 13:24
1. Gdy eksportujesz, to możesz eksportować:
a) cała bazę,
b) tylko struktrę
c) tylko dane
... i jest tam parę opcji jeszcze

2. Nie musi być Pajączek - nVu, Notepad-plus, Zajaczek - pierwsze trzy z brzegu i bezpłatne (Pajączek Lite też!)

andrzejj9
23-08-2006, 14:13
1. Gdy eksportujesz, to możesz eksportować:
a) cała bazę,
b) tylko struktrę
c) tylko dane
... i jest tam parę opcji jeszcze


Rzeczywiście tak jest. Nie zwróciłem na to wcześniej uwagi.

Zrobiłem więc tak, że najpierwo odznaczyłem dane i zostawiłem samą strukturę, którą exportowałem, a następnie analogicznie zrobiłem z danymi. Otrzymałem dwa pliki o takiej samej nazwie, ale umieściłem je w osobnych katalogach.




2. Nie musi być Pajączek - nVu, Notepad-plus, Zajaczek - pierwsze trzy z brzegu i bezpłatne (Pajączek Lite też!)

Ściągnąłem jednak pajączka.

Otworzyłem w nim ten plik z danymi, następnie z Menu Pisownia wybrałem zapisuj w kodowaniu. Które kodowanie powinienem tutaj ustawić: ISO-8859-2 czy jakiś UNICODE?

Następnie nie można już zapisać zmian w pliku tylko trzeba zapisać go osobno (Zapisz jako). Tutaj można wybrać jako dokumenty HTML, PHP, ASP, oraz jakieś z obsługa schematów kolorowania. No i inne pliki. Którą opcję należałoby wybrać?


I na końcu przy imporcie. Mam osobno strukturę i osobno dane. Rozumiem, że muszę i to i to zaimportować osobno (najpierw zapewne strukturę)?

pieniak
23-08-2006, 18:18
Zastanawiam się czy nie lepiej zmienić serwer (też szukam jakiegoś) na którym jest inny system kodowania znaków dla MySQL niż UTF-8 Unicode (utf8) tak aby przenieść portal wraz z bazą danych z serwera lokalnego na serwer w sieci bez kombinacji dekodowania na UTF-8.

Ja działam na razie na localhoscie bo nie zawsze mam dostęp do neta (dużo podróżuję), w chwilach wolnych zmieniam i udoskonalam swój portal.

Jeżeli raz go wrzucę na jakiś serwer a później zmienię (na localhoście) w nim kilka rzeczy to czy nie będę musiał ponownie dekodować danych ????

I tak w kółko!!!!!!

Jeżeli się mylę to proszę specjalistów o sprostowanie


pozdro "Początkujący"

andrzejj9
28-08-2006, 11:34
Najprostszy sposób poradzenia sobie z takim problemem:

1. Wyeksportuj odrębnie strukturę bazy danych i dane (dane ewentualnie w częściach, jeśli jest ich sporo)
2. Wczytaj dane do edytora rozpoznającego kodowanie lub posiadającego funkcję zmiany kodowania (np. Pajączek)
3. Wydaj polecenie: Zapisuj w kodowaniu => wybrane nowe kodowanie


Wrócę jeszcze raz do tego pytania.

Jak już ustawię z Pajączku to zapisywanie w odpowiednim kodowaniu (daje ISO-8859-2), to co mam potem zrobić - zapisać plik osobno (bo nie da się jedynie zapisać zmian) z rozszerzeniem sql?

I co wtedy powinno się stać, żebym wiedział, że zamiana coś dała?