1634Racine <1634@Racine.pl> napisał(a):
"no wiec" sprawdzone juz, operacja musi byc nastepujaca i jest szybka w
n++:
cyrylica w ansi (czyli krzaki) -> zmienic "zestaw znakow" na 1251 (juz
widac cyrylice) -> konwersja do utf-8 ("utrwalenie" cyrylicy)
Zdaje sie, ze tak to powinno wygladac, bowiem samo "cyrylica/ansi ->
konwersja do utf-8" nie daje nic, ani przez moment nie widac cyrylicy,
musi byc zmiana znakow na 1251.
dzieki za pomoc.
Oczywiście, że tak. Po "zdaje sie" wnioskuję, że jednak jeszcze potrzebne
jest dodatkowe wyjaśnienie, bo chyba mylisz kilka rzeczy.
UTF-8 to nie jest jakiś magiczny naprawiacz do krzaków. Jest to kodowanie
znaków zapisanych w Unicode. Oprócz UTF-8 Unicode może być zapisane np. jako
UTF-16. Lubimy Unicode, bo zastępuje prawie wszystkie inne strony kodowe.
Ponadto kodowania takie jak UTF-8 są często automatycznie rozpoznawane przez
edytory podczas otwierania pliku. Dlatego używamy Unicode aby uwolnić się od
masakry, jaką tworzy mnogość stron kodowych.
Ale jak wspomniałem, UTF-8 czy też samo Unicode, nie działa magicznie. Jeśli
masz cyrylicę, to edytor tekstu MUSI wiedzieć, że to jest cyrylica. Dlatego
musisz zmienić na 1251. W ten sposób informujesz edytor, że te bajty, które
on ma w pliku, to jest cyrylica zakodowana w 1251. Plik to ciąg bajtów. Jak
nie wskażesz kodowania, to zostanie użyte domyślne, czyli 1250 w polskim
Windowsie. Zamiast cyrylicy dostaniesz krzaki, a konkretnie znaczki, które
mają takie same kody (wartości bajtów) jak bukwy. Jak to skonwertujesz do
UTF-8, to edytor zamieni kody krzaków ANSI na kody krzaków Unicode. I dalej
będziesz mieć krzaki, tyle że w Unicode. Nie na bukwy, bo on nie wie, że to
cyrylica ma być. W pliku nie ma nigdzie informacji, że to jest cyrylica.
Pamiętaj, że wyrażenie "cyrylica w ANSI" znaczy tyle, że ktoś sobie zapisał
cyrylicę w postaci pliku ANSI, ale to wcale nie znaczy, że w tym pliku jest
cokolwiek co by mówiło, że to jest cyrylica. To jest w pewnym sensie umowa.
Umowa, która mówi, że trzeba ten plik wczytywać z kodowaniem 1251. Ale jakiś
program może sobie wczytać z innym kodowaniem i trzeba mu ręcznie
przestawiać, o ile ma w ogóle taką możliwość. Tak więc musisz wskazać
prawidłowe kodowanie zanim przekonwertujesz do Unicode i zakodujesz jako
UTF-8. Mówiąc w skrócie i kolokwialnie: skąd UTF-8 ma wiedzieć, że w pliku
jest cyrylica jeśli mu tego sam nie powiesz albo nie zmienisz domyślnej
strony kodowej w panelu sterowania?
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 9 days, 12 hours, 24 minutes and 50 seconds
|