JavaRush /Blog Java /Random-PL /Kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Un...
articles
Poziom 15

Kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Unicode (UTF 8, 16, 32) - jak rozwiązać problem z crackerami

Opublikowano w grupie Random-PL
Dzisiaj porozmawiamy o tym, skąd biorą się krakozyabry na stronie internetowej i w programach, jakie istnieją kodowania tekstu i jakie należy stosować. Przyjrzyjmy się bliżej historii ich rozwoju, zaczynając od podstawowego ASCII, a także jego rozszerzonych wersji CP866, KOI8-R, Windows 1251, a kończąc na nowoczesnych kodowaniach konsorcjum Unicode UTF 16 i 8. Kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Unicode (UTF 8, 16, 32) - jak rozwiązać problem z crackerami - 1Spis treści: Niektórym ta informacja może wydawać się zbędna, ale czy wiecie, ile otrzymuję pytań dotyczących pełzających krakozyabrów (nieczytelny zestaw znaków). Teraz będę miał okazję odesłać wszystkich do tekstu tego artykułu i znaleźć własne błędy. Cóż, przygotuj się na przyswojenie informacji i staraj się podążać za biegiem historii.

ASCII - podstawowe kodowanie tekstu dla alfabetu łacińskiego

Rozwój kodowania tekstu nastąpił jednocześnie z powstaniem branży IT i w tym czasie udało się jej przejść całkiem sporo zmian. Historycznie rzecz biorąc, wszystko zaczęło się od dość dysonansowego w rosyjskiej wymowie EBCDIC, który umożliwił kodowanie liter alfabetu łacińskiego, cyfr arabskich i znaków interpunkcyjnych ze znakami kontrolnymi. Mimo to za punkt wyjścia dla rozwoju współczesnego kodowania tekstu należy uznać słynny ASCII (amerykański standardowy kod wymiany informacji, który w języku rosyjskim zwykle wymawia się jako „zapytaj”). Opisuje pierwsze 128 znaków najczęściej używanych przez użytkowników anglojęzycznych - litery łacińskie, cyfry arabskie i znaki interpunkcyjne. Te 128 znaków opisanych w kodzie ASCII zawierało także pewne znaki usługowe, takie jak nawiasy klamrowe, znaki krzyżyka, gwiazdki itp. Tak naprawdę możesz je zobaczyć sam: Kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Unicode (UTF 8, 16, 32) - jak rozwiązać problem z crackerami - 2to właśnie te 128 znaków z oryginalnej wersji ASCII stało się standardem i w każdym innym kodowaniu na pewno je znajdziesz i pojawią się w tej kolejności. Ale faktem jest, że za pomocą jednego bajtu informacji można zakodować nie 128, a aż 256 różnych wartości (dwa do potęgi ósmej równa się 256), zatem po podstawowej wersji Asuki całość Pojawiła się seria rozszerzonych kodowań ASCII , w których możliwe było, że oprócz 128 podstawowych znaków można było zakodować także znaki kodowania narodowego (np. rosyjskiego). W tym miejscu warto chyba powiedzieć nieco więcej o systemach liczbowych zastosowanych w opisie. Po pierwsze, jak wszyscy wiecie, komputer działa tylko z liczbami w systemie dwójkowym, czyli zerami i jedynkami („algebra Boole’a”, jeśli ktoś to miał w instytucie lub szkole). Jeden bajt składa się z ośmiu bitów, z których każdy reprezentuje dwójkę do potęgi drugiej, zaczynając od zera, a kończąc na dwójce do siódmej: Kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Unicode (UTF 8, 16, 32) - jak rozwiązać problem z crackerami - 3 Nietrudno zrozumieć, że wszystkie możliwe kombinacje zer i jedynek w takiej konstrukcji mogą tylko 256. Konwersja liczby z systemu binarnego na dziesiętny jest dość prosta. Wystarczy dodać wszystkie potęgi dwójki do potęgi dwójki znajdującej się nad nimi. W naszym przykładzie okazuje się, że to jest 1 (2 do potęgi zera) plus 8 (dwa do potęgi 3), plus 32 (dwa do potęgi piątej), plus 64 (do potęgi szóstej), plus 128 (do potęgi siódmej). Suma wynosi 233 w zapisie dziesiętnym. Jak widać, wszystko jest bardzo proste. Ale jeśli przyjrzysz się uważnie tabeli ze znakami ASCII, zobaczysz, że są one reprezentowane w kodowaniu szesnastkowym. Na przykład „gwiazdka” odpowiada liczbie szesnastkowej 2A w języku Aski. Zapewne wiesz, że w systemie liczb szesnastkowych oprócz cyfr arabskich używane są także litery łacińskie od A (oznacza dziesięć) do F (oznacza piętnaście). Cóż, aby przekonwertować liczbę binarną na szesnastkowązastosuj następującą prostą metodę. Każdy bajt informacji jest podzielony na dwie części po cztery bity. Te. W każdym półbajcie można zakodować tylko szesnaście wartości (dwa do potęgi czwartej) w formacie binarnym, co można łatwo przedstawić w postaci liczby szesnastkowej. Co więcej, w lewej połowie bajtu stopnie będą musiały zostać policzone ponownie, zaczynając od zera, a nie jak pokazano na zrzucie ekranu. W efekcie otrzymujemy, że na zrzucie ekranu zakodowana jest liczba E9. Mam nadzieję, że tok mojego rozumowania i rozwiązanie tej zagadki były dla Państwa jasne. Cóż, teraz kontynuujmy rozmowę o kodowaniu tekstu.

Rozszerzone wersje Asuki - kodowanie CP866 i KOI8-R z pseudografiką

Zaczęliśmy więc rozmawiać o ASCII, który był niejako punktem wyjścia dla rozwoju wszystkich współczesnych kodowań (Windows 1251, Unicode, UTF 8). Początkowo zawierał tylko 128 znaków alfabetu łacińskiego, cyfry arabskie i coś jeszcze, jednak w wersji rozszerzonej stało się możliwe wykorzystanie wszystkich 256 wartości, które można zakodować w jednym bajcie informacji. Te. Do Ask'a stało się możliwe dodawanie symboli liter Twojego języka. W tym miejscu będziemy musieli jeszcze raz zrobić dygresję, aby wyjaśnić, dlaczego kodowanie tekstu jest w ogóle potrzebne i dlaczego jest to tak ważne. Znaki na ekranie Twojego komputera powstają w oparciu o dwie rzeczy - zestawy kształtów wektorowych (reprezentacje) różnych znaków (znajdują się w plikach z czcionkami zainstalowanymi na Twoim komputerze) oraz kod umożliwiający wyciągnięcie dokładnie tego z tego zestawu kształtów wektorowych (plik czcionki) symbol, który należy wstawić w odpowiednim miejscu. Oczywiste jest, że same czcionki odpowiadają za kształty wektorowe, ale system operacyjny i użyte w nim programy odpowiadają za kodowanie. Te. dowolny tekst na twoim komputerze będzie zbiorem bajtów, z których każdy koduje jeden znak tego właśnie tekstu. Program wyświetlający ten tekst na ekranie (edytor tekstu, przeglądarka itp.) podczas analizy kodu odczytuje kodowanie kolejnego znaku i szuka odpowiedniej postaci wektorowej w wymaganym pliku czcionki, który jest podłączony do wyświetlenia tego dokument tekstowy. Wszystko jest proste i banalne. Oznacza to, że aby zakodować dowolny potrzebny nam znak (np. z alfabetu narodowego) muszą zostać spełnione dwa warunki: postać wektorowa tego znaku musi być w użytej czcionce oraz znak ten mógłby być zakodowany w rozszerzonym kodowaniu ASCII w jednym bajcie. Dlatego istnieje cała gama takich opcji. Tylko do kodowania znaków języka rosyjskiego istnieje kilka odmian rozszerzonej Aska. Przykładowo pierwotnie pojawił się CP866 , który miał możliwość używania znaków z alfabetu rosyjskiego i był to rozszerzona wersja ASCII. Czyli jej górna część całkowicie pokrywała się z podstawową wersją Aski (128 znaków łacińskich, cyfr i inne badziewia), co widać na zrzucie ekranu tuż powyżej, natomiast dolna część tabeli z kodowaniem CP866 miała wygląd wskazany w zrzut ekranu tuż poniżej i pozwolił zakodować kolejne 128 znaków (rosyjskie litery i wszelkiego rodzaju pseudografiki): Kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Unicode (UTF 8, 16, 32) - jak rozwiązać problem z crackerami - 4 Widzisz, w prawej kolumnie liczby zaczynają się od 8, ponieważ cyfry od 0 do 7 odnoszą się do podstawowej części ASCII (patrz pierwszy zrzut ekranu). Zatem litera cyrylicy „M” w CP866 będzie miała kod 9C (znajduje się na przecięciu odpowiedniej linii z 9 i kolumny z liczbą C w systemie liczb szesnastkowych), który można zapisać w jednym bajcie informacji , a jeśli istnieje odpowiednia czcionka z rosyjskimi znakami, litera ta pojawi się w tekście bez żadnych problemów. Skąd wzięła się ta kwota?pseudografika w CP866 ? Rzecz w tym, że to kodowanie tekstu rosyjskiego zostało opracowane w tych kudłatych latach, kiedy graficzne systemy operacyjne nie były tak rozpowszechnione jak obecnie. A w Dosie i podobnych tekstowych systemach operacyjnych pseudografika pozwoliła przynajmniej w jakiś sposób urozmaicić konstrukcję tekstów, dlatego obfituje w nią CP866 i wszystkich innych jego rówieśników z kategorii rozszerzonych wersji Asuki. CP866 był dystrybuowany przez IBM, ale oprócz tego opracowano szereg kodowań dla znaków języka rosyjskiego, na przykład KOI8-R można przypisać do tego samego typu (rozszerzony ASCII) : Kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Unicode (UTF 8, 16, 32) - jak rozwiązać problem z crackerami - 5Zasada jego działania pozostaje taka sama jak w przypadku CP866 opisanego nieco wcześniej - każdy znak tekstu jest kodowany jako jeden bajt. Zrzut ekranu pokazuje drugą połowę stołu KOI8-R, ponieważ pierwsza połowa jest całkowicie zgodna z podstawową Asuką, co pokazano na pierwszym zrzucie ekranu w tym artykule. Wśród cech kodowania KOI8-R można zauważyć, że litery cyrylicy w jego tabeli nie są ułożone w kolejności alfabetycznej, jak miało to miejsce w CP866. Jeśli spojrzysz na pierwszy zrzut ekranu (podstawowej części, która jest zawarta we wszystkich rozszerzonych kodowaniach), zauważysz, że w KOI8-R rosyjskie litery znajdują się w tych samych komórkach tabeli, co odpowiadające im litery alfabetu łacińskiego z pierwszej części tabeli. Dokonano tego dla wygody przełączania ze znaków rosyjskich na znaki łacińskie poprzez odrzucenie tylko jednego bitu (dwa do potęgi siódmej, czyli 128).

Windows 1251 - nowoczesna wersja ASCII i dlaczego pojawiają się pęknięcia

Dalszy rozwój kodowania tekstu wynikał z faktu, że graficzne systemy operacyjne zyskiwały na popularności i z czasem zanikła w nich konieczność stosowania pseudografiki. W rezultacie powstała cała grupa, która w istocie nadal była rozszerzoną wersją Asuki (jeden znak tekstu jest kodowany tylko jednym bajtem informacji), ale bez użycia symboli pseudograficznych. Należały do ​​tzw. kodowań ANSI, które zostały opracowane przez American Standards Institute. W potocznym języku nazwa cyrylica była również używana dla wersji obsługującej język rosyjski. Przykładem może być Windows 1251 . Różnił się on korzystnie od stosowanych wcześniej CP866 i KOI8-R tym, że miejsce w nim symboli pseudograficznych zajęły brakujące symbole typografii rosyjskiej (z wyjątkiem znaku akcentu), a także symbole używane w językach słowiańskich zbliżonych do Rosyjski (ukraiński, białoruski itp.). ): Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниkod (UTF 8, 16, 32) — Jak исправить проблему с кракозябрами - 6Z powodu takiej obfitości kodowania języka rosyjskiego producenci czcionek i producenci oprogramowania nieustannie mieli bóle głowy, a wy i ja, drodzy czytelnicy, często wpadaliśmy w kłopoty z tymi samymi notorycznymi błędami gdy doszło do zamieszania w związku z wersją zastosowaną w tekście. Bardzo często pojawiały się podczas wysyłania i odbierania wiadomości e-mailem, co wiązało się z tworzeniem bardzo skomplikowanych tabel przeliczeniowych, które w rzeczywistości nie mogły zasadniczo rozwiązać tego problemu, a często użytkownicy stosowali transliterację liter łacińskich do korespondencji w celu unikaj notorycznego bełkotu przy korzystaniu z rosyjskiego kodowania typu CP866, KOI8-R czy Windows 1251. Tak naprawdę pęknięcia pojawiające się zamiast rosyjskiego tekstu były wynikiem nieprawidłowego użycia kodowania danego języka, które nie odpowiadało temu w w którym wiadomość tekstowa została pierwotnie zakodowana. Załóżmy, że jeśli spróbujesz wyświetlić znaki zakodowane przy użyciu CP866 przy użyciu tabeli kodów Windows 1251, to wyjdzie ten sam bełkot (bezsensowny zestaw znaków), całkowicie zastępując tekst wiadomości. Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниkod (UTF 8, 16, 32) — Jak исправить проблему с кракозябрами - 7Podobna sytuacja bardzo często ma miejsce przy tworzeniu i zakładaniu stron internetowych, forów czy blogów, gdy tekst zawierający rosyjskie znaki jest omyłkowo zapisany w złym kodowaniu, które jest domyślnie stosowane na stronie, lub w złym edytorze tekstu, co dodaje niewidoczny gag do kodu gołym okiem. W końcu wiele osób zmęczyło się tą sytuacją z dużą ilością kodowań i ciągle pełzającymi bzdurami, i pojawiły się przesłanki do stworzenia nowej uniwersalnej odmiany, która zastąpiłaby wszystkie istniejące i rozwiązałaby problem pojawiania się nieczytelnych tekstów . Dodatkowo pojawił się problem języków takich jak chiński, gdzie znaków językowych było znacznie więcej niż 256.

Unicode - uniwersalne kodowanie UTF 8, 16 i 32

Tych tysięcy znaków grupy języków Azji Południowo-Wschodniej nie dałoby się opisać w jednym bajcie informacji przeznaczonym do kodowania znaków w rozszerzonych wersjach ASCII. W rezultacie powstało konsorcjum o nazwie Unicode (Unicode Consortium) przy współpracy wielu liderów branży IT (produkujących oprogramowanie, kodujących sprzęt, tworzących czcionki), którzy byli zainteresowani powstaniem uniwersalnego kodowania tekstu. Pierwszą odmianą wydaną pod auspicjami Konsorcjum Unicode był UTF 32 . Liczba w nazwie kodowania oznacza liczbę bitów używanych do zakodowania jednego znaku. 32 bity to 4 bajty informacji, które będą potrzebne do zakodowania jednego znaku w nowym uniwersalnym kodowaniu UTF. W rezultacie ten sam plik z tekstem zakodowanym w rozszerzonej wersji ASCII i w UTF-32, w tym drugim przypadku, będzie miał czterokrotnie większy rozmiar (wagę). To źle, ale teraz mamy możliwość zakodowania przy użyciu UTF liczby znaków równej dwa do potęgi trzydziestej drugiej ( miliardy znaków , które pokryją każdą naprawdę niezbędną wartość z kolosalnym marginesem). Ale wiele krajów z językami grupy europejskiej w ogóle nie musiało używać tak dużej liczby znaków do kodowania, jednak przy użyciu UTF-32 bez powodu otrzymały czterokrotny wzrost wagi dokumentów tekstowych, a co za tym idzie wzrost wolumenu ruchu internetowego i ilości przechowywanych danych. To dużo i nikogo nie stać na takie marnotrawstwo. W wyniku rozwoju Unicode pojawił się UTF-16 , który okazał się na tyle skuteczny, że domyślnie został przyjęty jako podstawowa przestrzeń dla wszystkich używanych przez nas znaków. Do zakodowania jednego znaku używa dwóch bajtów. Zobaczmy jak ta sprawa wygląda. W systemie operacyjnym Windows możesz podążać ścieżką „Start” - „Programy” - „Akcesoria” - „Narzędzia systemowe” - „Tabela znaków”. W rezultacie otworzy się tabela z kształtami wektorowymi wszystkich czcionek zainstalowanych w systemie. Jeśli w „Opcjach zaawansowanych” wybierzesz zestaw znaków Unicode, będziesz mógł zobaczyć dla każdej czcionki osobno cały zakres zawartych w niej znaków. Nawiasem mówiąc, klikając dowolny z nich, możesz zobaczyć jego dwubajtowy kod w formacie UTF-16 , składający się z czterech cyfr szesnastkowych: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниkod (UTF 8, 16, 32) — Jak исправить проблему с кракозябрами - 8Ile znaków można zakodować w formacie UTF-16 przy użyciu 16 bitów? 65 536 (dwa do potęgi szesnastej) i to jest liczba, która została przyjęta jako przestrzeń bazowa w Unicode. Ponadto istnieją sposoby na zakodowanie za jego pomocą około dwóch milionów znaków, ale były one ograniczone do rozszerzonej przestrzeni miliona znaków tekstu. Ale nawet ta udana wersja kodowania Unicode nie przyniosła wiele satysfakcji tym, którzy pisali, powiedzmy, programy wyłącznie w języku angielskim, ponieważ po przejściu z rozszerzonej wersji ASCII na UTF-16 waga dokumentów podwoiła się (jeden bajt na znak w Aski i dwa bajty dla tego samego znaku w YUTF-16). Właśnie po to, aby zadowolić wszystkich i wszystko w konsorcjum Unicode, zdecydowano się opracować kodowanie o zmiennej długości . Nazywał się UTF-8. Pomimo ósemki w nazwie tak naprawdę ma zmienną długość, tj. Każdy znak tekstu można zakodować w sekwencji o długości od jednego do sześciu bajtów. W praktyce UTF-8 wykorzystuje jedynie zakres od jednego do czterech bajtów, ponieważ poza czterema bajtami kodu nie da się już nawet teoretycznie wyobrazić sobie niczego. Wszystkie zawarte w nim znaki łacińskie są zakodowane w jednym bajcie, tak jak w starym, dobrym ASCII. Co ciekawe, w przypadku kodowania wyłącznie alfabetu łacińskiego, nawet te programy, które nie rozumieją Unicode, i tak przeczytają to, co jest zakodowane w YTF-8. Oznacza to, że podstawowa część Asuki została po prostu przeniesiona na pomysł konsorcjum Unicode. Znaki cyrylicy w UTF-8 są kodowane w dwóch bajtach, a na przykład znaki gruzińskie są kodowane w trzech bajtach. Konsorcjum Unicode po stworzeniu UTF 16 i 8 rozwiązało główny problem - teraz w naszych czcionkach mamy pojedynczą przestrzeń kodową . A teraz ich producenci mogą wypełniać je jedynie wektorowymi formami znaków tekstowych, w oparciu o ich mocne strony i możliwości. W powyższej „Tabeli znaków” widać, że różne czcionki obsługują różną liczbę znaków. Niektóre czcionki bogate w Unicode mogą być dość ciężkie. Ale teraz różnią się nie tym, że zostały stworzone dla różnych kodowań, ale tym, że producent czcionek wypełnił całkowicie przestrzeń pojedynczego kodu określonymi formami wektorowymi.

Szalone słowa zamiast rosyjskich liter - jak temu zaradzić

Zobaczmy teraz, jak pojawiają się krakozyabry zamiast tekstu, czyli innymi słowy, jak wybierane jest prawidłowe kodowanie tekstu rosyjskiego. Właściwie jest to ustawione w programie, w którym tworzysz lub edytujesz ten sam tekst, lub kodujesz za pomocą fragmentów tekstu. Do edycji i tworzenia plików tekstowych osobiście używam bardzo dobrego, moim zdaniem, edytora HTML i PHP Notepad++ . Może jednak podkreślać składnię setek innych języków programowania i znaczników, a także ma możliwość rozszerzenia za pomocą wtyczek. Przeczytaj szczegółową recenzję tego wspaniałego programu pod podanym linkiem. W górnym menu Notepad++ znajduje się pozycja „Kodowanie”, gdzie będziesz mieć możliwość konwersji istniejącej opcji na tę, która jest domyślnie używana na Twojej stronie: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниkod (UTF 8, 16, 32) — Jak исправить проблему с кракозябрами - 9W przypadku strony na Joomla 1.5 i nowszych, jak podobnie jak w przypadku bloga na WordPressie, należy unikać pojawienia się Krakozyabrov, wybierając opcję UTF 8 bez BOM . Jaki jest przedrostek BOM? Faktem jest, że kiedy opracowywali kodowanie YUTF-16, z jakiegoś powodu postanowili dołączyć do niego coś takiego, jak możliwość zapisu kodu znaku zarówno w sekwencji bezpośredniej (na przykład 0A15), jak i odwrotnie (150A) . Aby programy rozumiały, w jakiej kolejności czytać kody, wymyślono BOM (znak kolejności bajtów lub inaczej podpis), który wyrażał się poprzez dodanie trzech dodatkowych bajtów na samym początku dokumentów. W kodowaniu UTF-8 w konsorcjum Unicode nie przewidziano żadnych BOM-ów, dlatego dodanie podpisu (tych notorycznie dodatkowych trzech bajtów na początku dokumentu) po prostu uniemożliwia niektórym programom odczytanie kodu. Dlatego zapisując pliki w formacie UTF musimy zawsze wybrać opcję bez BOM (bez podpisu). W ten sposób zabezpieczysz się z wyprzedzeniem przed wypełzaniem krakozyabrów . Co ciekawe, niektóre programy w systemie Windows nie mogą tego zrobić (nie mogą zapisywać tekstu w UTF-8 bez BOM), na przykład ten sam notoryczny Notatnik Windows. Zapisuje dokument w UTF-8, ale nadal dodaje podpis (trzy dodatkowe bajty) na jego początku. Co więcej, te bajty będą zawsze takie same - czytaj kod w bezpośredniej kolejności. Ale na serwerach z powodu tej drobnostki może pojawić się problem - wyjdą oszuści. Dlatego pod żadnym pozorem nie używaj zwykłego Notatnika systemu Windows .do edycji dokumentów na Twojej stronie, jeśli nie chcesz, aby pojawiły się jakieś pęknięcia. Wspomniany już edytor Notepad++ uważam za najlepszą i najprostszą opcję, która praktycznie nie ma wad, a składa się wyłącznie z zalet. W Notepad++ po wybraniu kodowania będziesz mieć możliwość konwersji tekstu na kodowanie UCS-2, które jest z natury bardzo zbliżone do standardu Unicode. Również w Notatniku możliwe będzie kodowanie tekstu w ANSI, tj. w odniesieniu do języka rosyjskiego będzie to Windows 1251, o którym pisaliśmy już tuż powyżej.Skąd pochodzą te informacje? Jest on zarejestrowany w rejestrze Twojego systemu operacyjnego Windows – jakie kodowanie wybrać w przypadku ANSI, jakie wybrać w przypadku OEM (dla języka rosyjskiego będzie to CP866). Jeśli ustawisz na swoim komputerze inny język domyślny, kodowania te zostaną zastąpione podobnymi z kategorii ANSI lub OEM dla tego samego języka. Po zapisaniu dokumentu w Notepad++ w potrzebnym kodowaniu lub otwarciu dokumentu ze strony do edycji, jego nazwę będziesz mógł zobaczyć w prawym dolnym rogu edytora: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниkod (UTF 8, 16, 32) — Jak исправить проблему с кракозябрами - 10Aby uniknąć zamieszania , oprócz kroków opisanych powyżej , przydatne będzie zapisanie w kodzie źródłowym w jego nagłówku wszystkich stron witryny informacji o tym właśnie kodowaniu, aby nie było zamieszania na serwerze lub hoście lokalnym. Ogólnie rzecz biorąc, wszystkie języki znaczników hipertekstowych z wyjątkiem HTML używają specjalnej deklaracji XML, która określa kodowanie tekstu.
<?xml version="1.0" encoding="windows-1251"?>
Przed analizą kodu przeglądarka wie, która wersja jest używana i jak dokładnie musi interpretować kody znaków tego języka. Warto jednak zauważyć, że jeśli zapiszesz dokument w domyślnym Unicode, tę deklarację XML można pominąć (kodowanie będzie uważane za UTF-8, jeśli nie ma BOM, lub UTF-16, jeśli jest BOM). W przypadku dokumentu HTML element Meta służy do wskazania kodowania , które jest umieszczane pomiędzy otwierającym i zamykającym znacznikiem Head:
<head>
...
<meta charset="utf-8">
...
</head>
Wpis ten różni się znacznie od standardu w HTML 4.01, ale jest w pełni zgodny ze standardem HTML 5 i będzie poprawnie zrozumiany przez każdą aktualnie używaną przeglądarkę. Teoretycznie element Meta wskazujący kodowanie dokumentu HTML lepiej byłoby umieścić jak najwyżej w nagłówku dokumentu , tak aby w momencie, gdy tekst napotka pierwszy znak spoza podstawowego ANSI (który zawsze jest czytany poprawnie i zgodnie z jakakolwiek odmiana), przeglądarka powinna już mieć informację o tym, jak interpretować kody tych znaków. Link do oryginalnego źródła: kodowanie tekstu ASCII (Windows 1251, CP866, KOI8-R) i Unicode (UTF 8, 16, 32) - jak rozwiązać problem z crackerami
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION