problem z konwersja z utf-8 do iso-8859-2

0

Witam,
mam problem z konwersja ciagu z utf-8 do iso-8859-2.

Ciag jest wczytywany z pliku zewn html (plik jest traktowany jak tekstowy), zapisanego w utf-8 - przynajmniej tak pspad wskazuje - do zmiennej, przetwarzany i wyswietlany przez strone php. Strona php jest zapisana z kodowaniem iso-8859-2, dodatkowo w tresci deklaruje takie samo kodowanie poprzez znacznik <meta>.

Problem w tym ze ciag , o ktorym wspominam po przetworzeniu w php wyswietla sie z 'krzakami'. Przepuszczenie go przez funkcje iconv() i mb_convert_encoding() nic nie daje.

Zalaczam linki do pliku o ktorym mowa, wejsciowego, i do pliku wynikowego, w ktorym zapisywany jest juz przetworzony ciag (w ktorym wyraznie widac 'krzaki').

Plik wejsciowy: http://chomikuj.pl/masgeo44/Dokumenty/inst...1766457503.html

Plik wyjsciowy -
http://chomikuj.pl/masgeo44/Dokumenty/html...,1766457501.txt

Moze ktos dopatrzy sie jakichs bledow w tresci pliku wejsciowego. Moze jest jakis problem z BOM. Mnie dziwi ze w tym pliku, w edytorze hexadecymalnym symbol pierwszego znaku to
FFFE, co nie wskazuje na bom utf-8, szybciej utf-16le.

0

A kodu PHP pokazać nie łaska?

0

Uwaga szczelam:

header('Content-Type: text/html; charset=COTAMPOTRZEBA');

szczeliłem.
Na poważnie to:

  1. Co jest złego w UTFie, że używasz ISO?
  2. Pliki wejściowe to nas mało obchodzą, pokaż php.
0

nie łaska....chcesz pomoc czy marudzic?

wrzucales plik wejsciowy do edytora hex? przyjrzales sie bom?

jezeli u Ciebie takie funkcje jak: file_get_contents(), substr(), file_put_contents(), $DOM->load_file(), $DOMNodeObj->C14N(), szczegolnie 2 ostatnie, nie knoca kodowania pliku tzn jezeli po przepuszczeniu przez te funkcje ciagu z pliku, funkcja mb_convert_encoding() bez problemow przeksztalca jego kodowanie z utf-8 do iso-8859-2 to bedzie to dla mnie cenna wskazowka

ps. kod jest chroniony prawami autorskimi, nie mam zgody na jego publikacje

0

Tak, przejrzałem się. Nie wiem o co ci chodziło z tym BOM bo nie napisałeś, obydwa pliki zaczynają się bajtem 0x3C (znak <).

Po odpowiedź z powietrza odsyłam do wróżki.

1

Normalnie wszyscy tylko czekają, żeby ukraść jakiś snippet kodu, który nawet nie działa. Pokaż kod to powiemy Ci co w nim nie tak. Swoją drogą wrzucanie pliku tekstowego do hexedytora to też niezły wyczyn.

0

Bez kodu można na podstawie plików powiedzieć tylko jedno: plik wejściowy nie jest ładowany jako UTF-8, tylko prawdopodobnie jako Latin-1 (CP1252 albo ISO 8859-1). W takiej sytuacji dalsza konwersja daje wyniki bez sensu.
W plikach nie ma żadnego BOM.

W skrócie: mając plik wejściowy w UTF-8 próbujesz zrobić konwersję z 8859-1 na 8859-2.

0

'przejrzec' to sie mozna w lustrze...

@Demonical Monk -

Swoją drogą wrzucanie pliku tekstowego do hexedytora to też niezły wyczyn

znasz inna metode na wykrycie czy plik ma BOM i jakie ma kodowanie? chyba ze chodzilo Ci o cos innego

na pewno rozpoznawanie kodowania znakow w pliku poprzez hexedytor do najlatwiejszych nie nalezy

z jednym sie zgodze - fakt, kod na pewno by sie przydal...bede go musial samodzielnie przejrzec(a jest tego troche bo kilka klas), i znalezc fragment ktory psuje kodowanie, jak juz wrzuce ten konkretny fragment

@Azarien, @Demonical Monk - do postu dolaczam zrzut pliku tekstowego z mojego hexedytora, wg mnie kodowanie na pewno nie jest utf-8, bo liczby szesnastkowe znakow z mojego edytora zupelnie nie odpowiadaja liczbom z tablicy znakow utf-8, wystarczy spojrzec na polskie litery.

Poza tym kodowanie jest dwubajtowe, wiec na pewno nie bedzie to iso-8859-2, ani ASCII, ani tez iso-8859-1 jak pisze azariel bo to kodowania jednobajtowe.

Dla przykladu podam: literka ł w moim edytorze kodowana jest symbolem 4201 (zaznaczylem na screenie), a w tablicy znakow utf-8 (zrodlo: http://pl.wikipedia.org/wiki/Kodowanie_polskich_znaków, http://www.gajdaw.pl/varia/polskie-ogonki-na-www/print.html#R1) to symbol C582, wiec jak widac znaki w moim pliku na pewno nie sa kodowane w utf-8, ani tez jednobajtowo.

Mi to wyglada na kodowanie utf-16le..skad ten pomysl? bom wyglada jak w utf-16le(wystarczy porownac z tabelka na stronach wiki), bom dla utf16le - 0xff 0xfe czyli fffe - 'czarno na bialym' na screenie(przeciecie kolumn 0000 i 0000), kodowanie pozostalych znakow(w tym polskich) tez odpowiada liczbom utf16le. Wystarczy przejrzec strone z kodowaniem polskich liter w utf-16 pod adresem http://www.gajdaw.pl/varia/polskie-ogonki-na-www/print.html#R1 (o ile jest prawidlowa), na ktorej widac ze nie tylko literka ł sie zgadza ale i inne polskie litery np ę - symbol 1901. I tu jedna uwaga, na stronie jest 0119 bo jest podany utf16be(Big-endian), utf-16le ma odwrotna kolejnosc stad 1901.
(tak nawiasem mowiac myli sie i edytor ktory wskazuje utf-8 co widac na screenie u dolu i php, dziwna sprawa)

chyba ze ja sie myle..nie mam doswiadczenia w tym temacie, moze ktos bardziej obeznany wyprowadzi mnie z bledu, jezeli sie nie myle - potwierdzi ze mam racje:]

przydatny moze tez byc artykul: http://programowanie.opole.pl/archives/2406 o kodowaniu utf z ktorego skorzystalem...

0

Zamiast wreszcie przeanalizować kod podejmujesz jakieś średnio sensowne działania w celu ustalenia z jakiego kodowania na jakie się zmieniło? I co Ci to da?

0

Pomijając fakt, że zignorowałeś mój post oraz, że bez pokazania kodu nikt się nad Twoim problemem nie pochyli to jak możesz mieć problem z ustalaniem kodowania pliku?
Kodowanie wejściowego pliku html to "UTF-8 (bez BOM)" (gratulacje za wrzucenie pliku na hosting wymagający js - dlatego nie pobrałem go zaraz po pojawieniu się tematu, tym razem to się już zirytowałem).

U mnie działa perfekcyjnie:

header('Content-Type: text/html; charset=iso-8859-2');
echo iconv('UTF-8', 'ISO-8859-2', file_get_contents('input.html'));

nie łaska....chcesz pomoc czy marudzic?

Ja osobiście chcę pomóc lub marudzić. Nie wiem dlaczego marudzenie wyklucza pomoc.

0

@wskaźnik - o co ty masz pretensje?? ja mam caly czas wlaczona obsluge js i nie mam takich problemow...poza tym co to za problem wlaczyc ja zwyczajnie w przegladarce:>? problem wyssany z palca
jak takie rzeczy cie irytuja(tylko mnie nie pobij) proponuje terapie, albo relanium

poza tym uwaga o marudzeniu nie byla bezposrednio do ciebie (no coz uderz w stol, a ..) a na pytanie o brak odpowiedzi sam sobie odpowiedz...à propos kodu php, napisalem ze sie zgadzam z tym ze to utrudnia rozwiazanie problemu

co do kodowania, nie bede komentowac bo najwyrazniej lubisz przede wszystkim skupiac sie na wszystkim co poboczne a dopiero pozniej na tym co w tytule postu

jezeli to tyle wysilku od ciebie wymaga, nie pomagaj, nie komentuj, spozytkuj te sily na cos bardziej pozytecznego:>

0

@Demonical Monk - tez nie rozumiem co maja na celu twoje wypowiedzi, ta ostatnia przynajmniej nic do tematu nie wnosi

0

Nie będę nawet komentował tej fali agresji (troll?). Pracuję z programistami, często dyskutujemy o tym, jak rozwiązać dany problem. Czasami ja wyśmiewam czyjeś pomysły, czasami moje pomysły są wyśmiewane - nikt nikogo jeszcze nie zabił, nikt nie potrzebuje terapii. Jeszcze raz, nie wiem skąd założenie, że pomoc musi być wielce uprzejma. Wręcz odwrotnie - proszący o pomoc powinien okazać jakiś szczątkowy szacunek (w końcu o pomoc, z założenia zwracamy się do lepszych od siebie).
Miałem jeszcze trochę pomysłów co do tematu, ale pewnie nie doczekam się komentarza.
Teraz czas na trochę agresji ode mnie: Powodzenia z problemem, który zlecił bym studentowi na jedną roboczogodzinę. Trzeba też było uprzedzić, że do czytania tematu przyda się popcorn.

1 użytkowników online, w tym zalogowanych: 0, gości: 1