Existuje více než 20 kódových stránek znaků. Rozšířené verze Asuka - kódování CP866 a KOI8-R s pseudografikou

V počítači jsou všechny informace uloženy digitální podobě. Počítač už nerozumí ničemu jinému než číslům. Obrázky, hudba, video a text, programy, hry a dokonce i viry pro počítač nejsou nic jiného než sada čísel. Čísla a jen čísla. Když stisknete klávesu na klávesnici, digitální kód odpovídající této klávese se odešle do počítače. Vzhledem k tomu, že na klíči jsou nakreslena písmena, číslice nebo něco jiného, ​​můžeme říci, že určitý digitální kód odpovídá určité písmeno nebo symbol. Při zobrazení na obrazovce počítač nakreslí písmeno nebo symbol v závislosti na digitálním kódu. To znamená, že pokud digitální kód odpovídá písmenu W, pak jej počítač nakreslí. Pokud zapíšeme korespondenci symbolů s digitálním kódem do tabulky, dostaneme kódová stránka. Kódová stránka je tabulka, která spojuje číselné (binární) kódy znaků nebo znaků používaných aplikacemi s klávesami na klávesnici nebo se zobrazením znaků na obrazovce. Podporu poskytují kódové stránky různé jazyky. Každá kódová stránka má své vlastní číslo. Například kódová stránka pro arabské znaky má číslo ср1256 a azbuka má ср1251. Obvykle můžete použít pouze jednu kódovou stránku na momentálněčas. Pokud potřebujete změnit jazyk, musíte změnit kódovou stránku. To je způsobeno omezený objem tabulky. Nyní, pokud byl text napsán pomocí jedné kódové stránky (nebo v jednom kódování) a pokusí se jej přečíst pomocí jiné kódové stránky (nebo v jiném kódování), pak s největší pravděpodobností nebude fungovat nic, protože digitální kódy zcela odlišné symboly nebo znaky budou odpovídat a nebudou se vůbec podobat původním. V důsledku toho vidíme gobbledygook nebo něco podobného. Z toho všeho vyplývá jednoduché pravidlo musí být načten pomocí stejné kódové stránky, která byla použita při zadávání čitelný text . Nebo použijte program, který dokáže převádět z jednoho kódování na druhé. V dnešní době to umí většina textových editorů a například v prohlížeči Microsoft Internet Explorer kódování lze změnit kliknutím klikněte pravým tlačítkem myši a vyberte „Kódování“. Aby se odstranilo omezení počtu jazykových znaků na kódové stránce, konsorcium Unicode vyvinulo standard kódování znaků, který umožňuje, aby téměř všechny světové jazyky byly zastoupeny v jedné sadě znaků. A tento standard se postupně začíná používat stále více.

Jazyky => Kódovací standardy

Vícejazyčné/ Unicode/ Jiné => UCS-2 little-endian a big-endian, UTF-8, UTF-7 arabština => Windows 1256, ASMO 708 zjednodušená čínština => GB2312, GBK, EUC-CN, ISO-2022-CN , HZ tradiční čínština => BIG5, EUC-TW, ISO-2022-TW Cyrilice => Windows 1251, KOI8-R, KOI8-RU, ISO8859-5, DOS 866 angličtina/západoevropská/jiná latinská znaková sada => Windows 1250 , 1252-1254, 1257, ISO8859-x řečtina => Windows 1253 hebrejština => Windows 1255 japonština => Shift-JIS, ISO-2022-JP (JIS), EUC-JP korejština => Wansung , Johab, ISO-2022- KR, EUC-KR Thai => Windows 874 vietnamština => Windows 1258 indické jazyky ​​=> ISCII (indické písmo Kód pro výměna informací)

První vážný problém Problém, se kterým se většina začátečníků potýká, se týká znakové sady. znaková sada). Tento problém s kódováním je vyjádřen v tzv. „crackerech“, které dostáváme místo znaků uvedených v souboru HTML. V tomto článku se chci na problém s kódováním podívat podrobněji, pokusit se dát vše do pořádku a uvést možná řešení.

  • Co je kódování?
  • Kódování souboru (úprava v Notepad++)
  • Kódování displeje (zobrazit v prohlížeči)
  • Jak určit kódování stránky HTML? (metaznačka znakové sady)
  • Stále máte problém s kódováním? (znaková sada záhlaví v php)

Co je kódování?

Relativně řečeno, každý symbol(znak) sestává z kód A obrázky. Zde kód- Tohle jedinečný identifikátor znak ve znakové sadě, která je určena vybraným kódování, A obrázek je vizuální reprezentace symbolu, který je obsažen v soubor písma v buňce odpovídající kódu symbolu.

jinými slovy, kódování(Angličtina) znaková sada) je soubor vztahů kódy znaků s jejich vizuální reprezentace v písmu.

Kódování souboru

HTML stránka je běžná textový soubor, jehož kódování je zvoleno při jeho vytvoření a/nebo uložení na paměťové zařízení (pevný disk, flash disk atd.).

V případě Notepad++ se kódování nového dokumentu nastavuje v nastavení textový editor. Vyberte si z nabídky: Možnosti > Nastavení…- a přejděte na kartu " Nový dokument " Zde nás zajímá sekce „ Kódování" Ve výchozím nastavení je vybráno kódování ANSI.

Připomínám, že toto je kódování, ve kterém bude soubor HTML uložen.

Vždy však můžete převést kódování HTML stránky pomocí příslušných funkcí textového editoru. Například v programu Notepad++ to provedete kliknutím na položku nabídky „ Kódování» a vyberte požadovanou transformaci.

V v tomto případě soubor byl zakódován ANSI a převedl jsem to na UTF-8(bez kusovníku). O tom, co je to kusovník, si můžete přečíst v mém článku: PHP: jak odstranit kusovník ve WordPressu - podle následujícího postupu.

Kódování displeje

Je důležité se oddělit kódování souboru A kódování displeje. Bez ohledu na to, v jakém kódování je soubor uložen, může být zobrazen v jakémkoli jiném kódování. To je jeden z důvodů problémů s kódováním.

Pokud jste například uložili zakódovanou stránku HTML ANSI a otevřete jej v prohlížeči, místo ruských znaků můžete získat takzvané „krakozyabriky“.

V tomto případě se musíme ujistit kódování souboru shoduje se s kódování displeje soubor v prohlížeči. Chcete-li to provést ve Firefoxu, klikněte na ikonu nabídky a poté na položku „ Kódování" Pokud žádný nemáte, klikněte na „ Přeměna"a přidejte prvek" Kódování“ v nabídce.

Jak vidíte, prohlížeč zobrazuje soubor v kódování " Unicode» (Například, UTF-8) , zatímco soubor byl uložen v kódování ANSI (Například, Windows-1251) . Volbou požadovaného kódování získáme výsledek, který potřebujeme.

V případě Notepad++ je také možné zvolit kódování displeje. Chcete-li to provést, klikněte na položku nabídky „ Kódování“, a pak správná možnost slouží k zobrazení kódování.

V tomto případě jsem změnil kódování displeje ANSI na UTF-8(bez kusovníku).

Jak určit kódování stránky HTML?

A tak jsme již přišli na to, co je kódování a jaký je rozdíl mezi kódováním souborů a kódováním zobrazení. Nyní musíme vyřešit problém s kódováním, což je dezinterpretace prohlížeč (nebo jakýkoli jiný klient) HTML kódování stránek.

Proč jsou problémy s kódováním? Určení kódování stránky HTML není snadné a často ani možné, protože stejný prohlížeč o něm nemá informace nebo je zadán nesprávně.

Pro specifikaci kódování HTML stránky se používá speciální meta tag. V HTML5 má následující oříznutý tvar:

V tomto případě je kódování UTF-8(Unicode).

Ve starším HTML verze tato metaznačka vypadá takto:

Tato metaznačka vytváří hlavičku HTTP Content-Type, která určuje typ dokumentu text/html a jeho kódování Windows-1251 (ANSI).

Osobně doporučuji tuto možnost využít, protože... bude mít nejméně problémů. Hlavní věc je, že takový meta tag je přítomen v sekce HEAD a kódování v něm uvedené odpovídalo kódování souboru. Ve většině případů to bude stačit.

Stále máte problém s kódováním?

V některých případech nebude stačit zadat metaznačku s kódováním stránky HTML. Tento problém může být způsoben nastavením samotného serveru, na kterém je umístěn soubor stránky HTML. Jde o to, že server je schopen vydávat moje HTTP hlavička Content-Type , která bude, relativně vzato, mít přednost před meta tagem.

V tomto případě lze tento problém vyřešit provedením změn v nastavení serveru. Nebudu zabíhat do podrobností tohoto problému a pouze doporučím deaktivovat veškeré toto překódování prostřednictvím souboru .htaccess, Například:

CharsetDisable Vypnuto

Můžete také provést změny v záhlaví HTTP Content-Type a software. Ve stejném PHP se k tomu používá funkce header(), například:

header("Typ obsahu: text/html; charset=UTF-8");

Upozorňuji na skutečnost, že musí být zadány hlavičky HTTP na zobrazit na obrazovce nějaké informace, jinak se zobrazí chybová zpráva.

Historicky bylo v prvních počítačích pro reprezentaci tištěných znaků (kódování textu) přiděleno 7 bitů. 27 = 128. Toto množství stačilo na zakódování všech malých a velkých písmen latinské abecedy, deseti číslic a různých znaků a závorek. Toto je přesně 7bitová tabulka znaků ASCII (American Standard Code for Information Interchange), podrobné informace o kterých můžete získat pomocí příkazu man ascii operačního systému Linux.

Když vznikla potřeba kódovat národní abecedy, 128 znaků přestalo stačit. Bylo rozhodnuto přejít na kódování pomocí 8 bitů (tedy jednoho bajtu). V důsledku toho se počet znaků, které lze tímto způsobem zakódovat, rovnal 2 8 = 256. Symboly národních abeced se v tomto případě nacházely v druhé polovině kódové tabulky, tj. obsahovaly jednotku na nejvýznamnější pozici bajtu vyhrazeného pro kódování znaků. Tak se zrodila norma ISO 8859 obsahující mnoho kódování pro nejběžnější jazyky.

Mezi nimi byla jedna z prvních tabulek pro kódování ruských písmen - ISO 8859-5(pomocí příkazu man iso_8859_1 získáte kódy ruských písmen v této tabulce).

Úkoly přenosu textových informací po síti si vynutily vývoj dalšího kódování pro ruská písmena, tzv Koi8-R(kód zobrazení informací je 8bitový, Russified). Vezměme si situaci, kdy je dopis obsahující ruský text odeslán e-mailem. Stávalo se, že při cestování napříč sítěmi bylo písmeno zpracováno programem, který pracoval se 7bitovým kódováním a nastavil osmý bit na nulu. V důsledku této transformace se kód znaku zmenšil o 128 a změnil se na kód znaku latinské abecedy. Bylo potřeba zvýšit odolnost přenášených textových informací na nulování 8. bitu.

Naštěstí má značný počet cyrilských písmen fonetické analogy v latinské abecedě. Například Ф a F, Р a R. Existuje několik písmen, která se stylově shodují. Uspořádáním ruských písmen v tabulce kódů takovým způsobem, že jejich kód přesahuje kód podobná latina na číslo 128 dosáhli toho, že ztráta 8. bitu otočila text, sestávající sice pouze z latinky, ale stále srozumitelný pro rusky mluvícího uživatele.

Protože ze všech v té době běžných operačních systémů měly různé klony operačního systému Unix nejpohodlnější prostředky pro práci se sítí, stalo se toto kódování v těchto systémech de facto standardem. Tak je tomu nyní v OS Linux. A právě toto kódování se nejčastěji používá pro výměnu pošty a zpráv na internetu.

Pak přišla éra osobních počítačů a operačního systému MS DOS. Jak se ukázalo, kódování Koi8-R pro něj nebylo vhodné (stejně jako ISO 8859-5 v jeho tabulce, některá ruská písmena byla na těch místech, o kterých mnoho programů předpokládalo, že jsou vyplněny pseudografikou (horizontální a vertikální); čárky, rohy atd.). Proto bylo vynalezeno další kódování cyrilice, v jehož tabulce ruská písmena „obtékala“ grafické symboly na všech stranách. Toto kódování se nazývalo alternativní(alt), protože se jednalo o alternativu k oficiálnímu standardu - kódování ISO-8859-5. Nepopiratelnou výhodou tohoto kódování je, že ruská písmena v něm jsou uspořádána v abecedním pořadí.

Po objevení operačního systému Windows od společnosti Microsoft se ukázalo, že alternativní kódování pro něj z určitých důvodů není vhodné. Po opětovném přesunutí ruských písmen v tabulce (objevila se příležitost - koneckonců, pseudografika není ve Windows vyžadována), dostali jsme kódování Windows 1251(Win-1251).

Počítačová technologie se však neustále zlepšuje a v současné době stále větší počet programů začíná podporovat standard Unicode, který vám umožňuje kódovat téměř všechny jazyky a dialekty obyvatel Země.

Různé operační systémy tedy upřednostňují různá kódování. Aby bylo možné číst a upravovat text napsaný v jiném kódování, používají se programy pro překódování ruského textu. Některé textové editory obsahují vestavěné transkodéry, které umožňují číst text v různých kódováních (Word atd.). Pro převod souborů využijeme řadu utilit v OS Linux, jejichž účel je z názvu jasný: alt2koi, win2koi, koi2win, alt2win, win2alt, koi2alt (odkud, kde je číslo 2 (dvě) zvukově podobný předložce to, udávající směr). Tyto příkazy mají stejnou syntaxi: příkaz<входной_файл >výstupní_soubor.

Příklad

Překódujme text napsaný v editoru Edit v prostředí MS DOS do kódování Koi8-R. Chcete-li to provést, spusťte příkaz

alt2koi soubor1.txt > soubornew

Vzhledem k tomu, že řádkování je v MS DOS a Linuxu zakódováno odlišně, doporučuje se spustit také příkaz „fromdos“:

fromdos filenew > soubor2.txt

Zpětný příkaz se nazývá „todos“ a má stejnou syntaxi.

Příklad

Seřaďme si soubor List.txt, obsahující seznam příjmení a připravený v kódování Koi8-R, podle abecedy. Použijme příkaz sort, který seřadí textový soubor podle vzestupných nebo sestupných kódů znaků. Pokud to aplikujete hned, tak např. písm V se objeví na konci seznamu, podobně jako odpovídající písmeno latinské abecedy PROTI. Pamatujte, že v alternativním kódování jsou ruská písmena uspořádána přísně v abecedním pořadí, proveďte několik operací: překódujte text do alternativního kódování, seřaďte jej a vraťte jej znovu do kódování Koi8-R. Pomocí příkazového potrubí dostaneme

koi2alt List.txt | seřadit | alt2koi > List_Sort.txt

Moderní distribuce operačního systému Linux vyřešily mnoho problémů spojených s lokalizace software. Obslužný program pro třídění nyní bere v úvahu zvláštnosti kódování Koi8-R a pro řazení souboru v abecedním pořadí stačí spustit příkaz

Dobrý den, milí čtenáři tohoto blogu. Dnes si s vámi povíme, odkud na webu a v programech krakozyabry pocházejí, jaká textová kódování existují a která by se měla používat. Podívejme se blíže na historii jejich vývoje, počínaje základním ASCII, i jeho rozšířenými verzemi CP866, KOI8-R, Windows 1251 a konče moderními kódováními konsorcia Unicode UTF 16 a 8.

Někomu se tato informace může zdát zbytečná, ale víte, kolik otázek dostávám konkrétně ohledně prolézajících se krakozyabrů (nečitelná sada znaků). Nyní budu mít možnost všechny odkázat na text tohoto článku a najít své vlastní chyby. No, připravte se na vstřebání informací a pokuste se sledovat tok příběhu.

ASCII - základní kódování textu pro latinku

Vývoj kódování textů probíhal souběžně s formováním IT průmyslu a za tuto dobu stihlo projít poměrně velkým množstvím změn. Historicky vše začalo EBCDIC, který byl v ruské výslovnosti spíše disonantní, což umožnilo kódovat písmena latinské abecedy, arabské číslice a interpunkční znaménka s řídicími znaky.

Ale přesto by měl být výchozí bod pro vývoj moderních textových kódování považován za slavný ASCII(Americký standardní kód pro výměnu informací, který se v ruštině obvykle vyslovuje jako „zeptat se“). Popisuje prvních 128 znaků nejčastěji používaných anglicky mluvícími uživateli – latinská písmena, arabské číslice a interpunkční znaménka.

Těchto 128 znaků popsaných v ASCII také zahrnovalo některé servisní znaky, jako jsou závorky, značky hash, hvězdičky atd. Ve skutečnosti je můžete vidět sami:

Právě těchto 128 znaků z původní verze ASCII se stalo standardem a v jakémkoli jiném kódování je určitě najdete a objeví se v tomto pořadí.

Faktem ale je, že jedním bajtem informací můžete zakódovat ne 128, ale až 256 různých hodnot (dvě mocniny osmi se rovná 256), takže po základní verzi Asuka celá řada rozšířené ASCII kódování, do kterého bylo možné kromě 128 základních znaků kódovat i symboly národního kódování (například ruské).

Zde pravděpodobně stojí za to říci trochu více o číselných systémech, které jsou použity v popisu. Za prvé, jak všichni víte, počítač pracuje pouze s čísly ve dvojkové soustavě, konkrétně s nulami a jedničkami (“Booleovská algebra”, pokud to někdo na ústavu nebo škole bral). , z nichž každá je dvojka na mocninu, počínaje nulou a od dvou do sedmé:

Není těžké pochopit, že všechny možné kombinace nul a jedniček v takovém provedení mohou být pouze 256. Převod čísla z dvojkové do desítkové soustavy je vcelku jednoduchý. Stačí sečíst všechny mocniny dvojky s jedničkami nad nimi.

V našem příkladu je to 1 (2 na nulu) plus 8 (dvě na 3), plus 32 (dvě na pátou mocninu), plus 64 (na šestou mocninu) plus 128 (do sedmé mocniny). Celkem je 233 v desítkovém zápisu. Jak vidíte, vše je velmi jednoduché.

Když se ale pozorně podíváte na tabulku se znaky ASCII, uvidíte, že jsou zastoupeny v hexadecimálním kódování. Například „hvězdička“ odpovídá hexadecimálnímu číslu 2A v Aski. Asi víte, že v hexadecimální číselné soustavě se kromě arabských číslic používají i latinská písmena od A (znamená deset) do F (znamená patnáct).

Tak tedy pro převod binárního čísla na hexadecimální uchýlit se k následující jednoduché a zřejmé metodě. Každý bajt informace je rozdělen na dvě části po čtyřech bitech, jak je znázorněno na výše uvedeném snímku obrazovky. Že. V každém půlbajtu lze binárně zakódovat pouze šestnáct hodnot (dvě až čtvrtá mocnina), které lze snadno reprezentovat jako hexadecimální číslo.

Navíc v levé polovině bajtu bude nutné znovu počítat stupně počínaje nulou, a ne jak je znázorněno na snímku obrazovky. Ve výsledku jednoduchými výpočty dostaneme, že na snímku obrazovky je zakódováno číslo E9. Doufám, že průběh mého uvažování a řešení této hádanky vám bylo jasné. Nyní pokračujme ve skutečnosti v mluvení o kódování textu.

Rozšířené verze Asuka - kódování CP866 a KOI8-R s pseudografikou

Začali jsme tedy mluvit o ASCII, které bylo jakoby výchozím bodem pro vývoj všech moderních kódování (Windows 1251, Unicode, UTF 8).

Zpočátku obsahoval pouze 128 znaků latinské abecedy, arabské číslice a něco jiného, ​​ale v rozšířené verzi bylo možné použít všech 256 hodnot, které lze zakódovat do jednoho bajtu informací. Tito. Bylo možné přidat do Aski symboly písmen vašeho jazyka.

Zde budeme muset znovu odbočit, abychom vysvětlili - proč vůbec potřebujeme kódování? texty a proč je to tak důležité. Znaky na obrazovce vašeho počítače jsou tvořeny na základě dvou věcí – sady vektorových forem (reprezentací) různých znaků (jsou umístěny v souborech s ) a kódu, který vám umožňuje vytáhnout z této sady vektorových forem (soubor fontů ) přesně ten znak, který bude potřeba vložit na správné místo.

Je jasné, že za vektorové tvary jsou zodpovědné samotné fonty, ale za kódování je zodpovědný operační systém a programy v něm použité. Tito. jakýkoli text ve vašem počítači bude sadou bajtů, z nichž každý zakóduje jeden jediný znak právě tohoto textu.

Program, který zobrazuje tento text na obrazovce (textový editor, prohlížeč atd.), při parsování kódu načte kódování dalšího znaku a hledá odpovídající vektorovou formu v požadovaném souboru fontu, který je připojen k zobrazení tohoto textový dokument. Všechno je jednoduché a banální.

To znamená, že pro zakódování jakéhokoli znaku, který potřebujeme (například z národní abecedy), musí být splněny dvě podmínky - vektorová podoba tohoto znaku musí být v použitém fontu a tento znak by mohl být zakódován v rozšířených ASCII kódováních v jeden bajt. Proto je takových možností celá řada. Jen pro kódování znaků ruského jazyka existuje několik druhů rozšířené Aska.

Například se původně objevil CP866, který měl možnost používat znaky z ruské abecedy a byl rozšířenou verzí ASCII.

Tito. její horní část se zcela shodovala se základní verzí Aska (128 latinských znaků, čísel a dalších kravin), která je uvedena na snímku nahoře, ale spodní část tabulky s kódováním CP866 měla vzhled naznačený na snímku těsně pod a umožnil zakódovat dalších 128 znaků (ruská písmena a nejrůznější pseudografiky):

Vidíte, v pravém sloupci čísla začínají 8, protože... čísla od 0 do 7 odkazují na základní část ASCII (viz první snímek obrazovky). Že. ruské písmeno „M“ v CP866 bude mít kód 9C (nachází se na průsečíku odpovídajícího řádku s 9 a sloupce s číslem C v hexadecimálním číselném systému), který lze zapsat do jednoho bajtu informace a pokud je k dispozici vhodné písmo s ruskými znaky, toto písmeno se bez problémů v textu objeví.

Kde se tato částka vzala? pseudografika v CP866? Celá podstata spočívá v tom, že toto kódování pro ruský text bylo vyvinuto v těch chundelatých letech, kdy grafické operační systémy nebyly tak rozšířené jako nyní. A v Dose a podobných textových operačních systémech pseudografika umožňovala alespoň nějak zpestřit design textů, a proto se jí CP866 a všichni jeho další vrstevníci z kategorie rozšířených verzí Asuka jen tak hemží.

CP866 byl distribuován společností IBM, ale kromě toho byla vyvinuta řada kódování pro znaky ruského jazyka, například stejný typ (rozšířené ASCII) lze přiřadit KOI8-R:

Princip jeho fungování zůstává stejný jako u o něco dříve popsaného CP866 – každý znak textu je zakódován jedním jediným byte. Snímek obrazovky ukazuje druhou polovinu tabulky KOI8-R, protože první polovina je zcela v souladu se základní Asukou, která je zobrazena na prvním snímku obrazovky v tomto článku.

Mezi rysy kódování KOI8-R lze poznamenat, že ruská písmena v jeho tabulce nejsou v abecedním pořadí, jako tomu bylo například u CP866.

Pokud se podíváte na úplně první snímek obrazovky (základní části, která je součástí všech rozšířených kódování), všimnete si, že v KOI8-R jsou ruská písmena umístěna ve stejných buňkách tabulky jako odpovídající písmena latinské abecedy. z první části tabulky. To bylo provedeno pro pohodlí přechodu z ruštiny na latinku vyřazením pouze jednoho bitu (od dvou do sedmé mocniny neboli 128).

Windows 1251 - moderní verze ASCII a proč se objevují praskliny

Další vývoj kódování textů byl dán tím, že grafické operační systémy získávaly na oblibě a potřeba v nich pseudografiku časem vymizela. V důsledku toho vznikla celá skupina, která byla v podstatě stále rozšířenými verzemi Asuka (jeden znak textu je zakódován pouze jedním bajtem informace), ale bez použití pseudografických symbolů.

Patřily mezi tzv. kódování ANSI, které vyvinul American Standards Institute. V běžné řeči se název azbuka vžil i pro verzi s podporou ruského jazyka. Příkladem může být.

Od dříve používaných CP866 a KOI8-R se příznivě lišil tím, že místo pseudografických symbolů v něm zaujaly chybějící symboly ruské typografie (kromě přízvuku), jakož i symboly používané ve slovanských jazycích blízkých ruština (ukrajinská, běloruská atd.):

Kvůli takovému množství kódování ruského jazyka měli výrobci písem a výrobci softwaru neustále bolesti hlavy a vy a já, milí čtenáři, jsme často dostávali stejné notoricky známé krakozyabry když došlo k záměně s verzí použitou v textu.

Velmi často vycházely při odesílání a přijímání zpráv e-mailem, což znamenalo vytvoření velmi složitých převodních tabulek, které ve skutečnosti nemohly tento problém zásadně vyřešit a uživatelé často používali pro korespondenci, aby se vyhnuli notoricky známým trikům při používání Ruská kódování jako CP866, KOI8-R nebo Windows 1251.

Praskliny objevující se místo ruského textu byly ve skutečnosti důsledkem nesprávného použití kódování tohoto jazyka, které neodpovídalo tomu, ve kterém byla textová zpráva původně zakódována.

Řekněme, že pokud se pokusíte zobrazit znaky zakódované pomocí CP866 pomocí tabulky kódů Windows 1251, objeví se stejné nesmysly (nesmyslná sada znaků), které zcela nahradí text zprávy.

Podobná situace velmi často nastává na fórech nebo blozích, kdy je text s ruskými znaky omylem uložen ve špatném kódování, které je na webu standardně použito, nebo ve špatném textovém editoru, který do kódu přidává gagy, které nejsou pro uživatele viditelné. pouhým okem.

Tato situace se spoustou kódování a neustále se plížících gaunerů nakonec mnohé omrzela a objevily se předpoklady pro vytvoření nové univerzální variace, která by nahradila všechny stávající a konečně vyřešila problém se vzhledem. nečitelných textů. Kromě toho se objevil problém jazyků jako čínština, kde bylo mnohem více jazykových znaků než 256.

Unicode - univerzální kódování UTF 8, 16 a 32

Tyto tisíce znaků jazykové skupiny jihovýchodní Asie nebylo možné popsat v jednom bajtu informací, které byly přiděleny pro kódování znaků v rozšířených verzích ASCII. V důsledku toho bylo vytvořeno konsorcium tzv Unicode(Unicode - Unicode Consortium) ve spolupráci mnoha lídrů IT průmyslu (těch, kteří vyrábějí software, kteří kódují hardware, kteří vytvářejí fonty), kteří měli zájem na vzniku univerzálního kódování textu.

První variace vydaná pod záštitou Unicode Consortium byla UTF 32. Číslo v názvu kódování znamená počet bitů, které jsou použity ke kódování jednoho znaku. 32 bitů se rovná 4 bajtům informací, které budou potřeba k zakódování jednoho jediného znaku v novém univerzálním kódování UTF.

Výsledkem je, že stejný soubor s textem zakódovaným v rozšířené verzi ASCII a v UTF-32 v druhém případě bude mít velikost (váhu) čtyřikrát větší. To je špatné, ale nyní máme možnost zakódovat pomocí YTF počet znaků rovný dvěma až třicetisekundové mocnině ( miliardy postav, která pokryje jakoukoli skutečně potřebnou hodnotu s kolosální marží).

Ale mnoho zemí s jazyky evropské skupiny vůbec nepotřebovalo používat tak velké množství znaků v kódování, nicméně při použití UTF-32 bezdůvodně získaly čtyřnásobné zvýšení hmotnosti textových dokumentů, a v důsledku toho zvýšení objemu internetového provozu a objemu uložených dat. To je hodně a nikdo by si nemohl dovolit takové plýtvání.

V důsledku vývoje Unicode, UTF-16, který se ukázal být natolik úspěšný, že byl standardně přijat jako základní prostor pro všechny znaky, které používáme. Ke kódování jednoho znaku používá dva bajty. Podívejme se, jak tato věc vypadá.

V operačním systému Windows můžete postupovat podle cesty „Start“ - „Programy“ - „Příslušenství“ - „Systémové nástroje“ - „Tabulka znaků“. V důsledku toho se otevře tabulka s vektorovými tvary všech písem nainstalovaných ve vašem systému. Pokud v části „Pokročilé možnosti“ vyberete znakovou sadu Unicode, budete moci pro každé písmo samostatně zobrazit celý rozsah znaků, které jsou v něm obsaženy.

Mimochodem, kliknutím na kterýkoli z nich se zobrazí jeho dvoubajt kód ve formátu UTF-16, skládající se ze čtyř hexadecimálních číslic:

Kolik znaků lze zakódovat v UTF-16 pomocí 16 bitů? 65 536 (dvě mocniny šestnácti) a toto je číslo, které bylo v Unicode přijato jako základní prostor. Kromě toho existují způsoby, jak pomocí něj zakódovat asi dva miliony znaků, ale ty byly omezeny na rozšířený prostor na milion znaků textu.

Ale ani tato úspěšná verze kódování Unicode nepřinesla velké uspokojení těm, kteří psali programy řekněme pouze v angličtině, protože pro ně se po přechodu z rozšířené verze ASCII na UTF-16 váha dokumentů zdvojnásobila ( jeden bajt na znak v Aski a dva bajty na stejný znak v YUTF-16).

Bylo rozhodnuto přijít právě proto, abychom uspokojili všechny a všechno v konsorciu Unicode kódování s proměnnou délkou. Jmenovalo se to UTF-8. Přes tu osmičku v názvu má vlastně proměnnou délku, tzn. Každý znak textu lze zakódovat do sekvence o délce jednoho až šesti bajtů.

V praxi UTF-8 používá pouze rozsah od jednoho do čtyř bajtů, protože nad čtyřmi bajty kódu si už není ani teoreticky možné nic představit. Všechny latinské znaky v něm jsou zakódovány do jednoho bajtu, stejně jako ve starém dobrém ASCII.

Pozoruhodné je, že v případě kódování pouze latinské abecedy budou i ty programy, které nerozumí Unicode, stále číst to, co je zakódováno v YTF-8. Tito. základní část Asuka byla jednoduše přenesena do tohoto vytvoření konsorcia Unicode.

Znaky azbuky v UTF-8 jsou kódovány do dvou bajtů a například gruzínské znaky jsou kódovány do tří bajtů. Unicode Consortium po vytvoření UTF 16 a 8 vyřešilo hlavní problém - nyní máme fonty mají jeden kódový prostor. A nyní ji jejich výrobci mohou naplnit pouze vektorovými formami textových znaků na základě svých silných stránek a schopností. Nyní přicházejí dokonce v sadách.

V „Tabulce znaků“ výše můžete vidět, že různá písma podporují různé počty znaků. Některá písma bohatá na Unicode mohou být poměrně těžká. Nyní se však neliší v tom, že byly vytvořeny pro různá kódování, ale v tom, že výrobce písem vyplnil nebo zcela nevyplnil prostor jediného kódu určitými vektorovými tvary.

Bláznivá slova místo ruských písmen - jak to opravit

Podívejme se nyní, jak se místo textu objevují krakozyabry nebo jinými slovy, jak se vybírá správné kódování pro ruský text. Ve skutečnosti se nastavuje v programu, ve kterém vytváříte nebo upravujete právě tento text nebo kód pomocí textových fragmentů.

K úpravám a vytváření textových souborů osobně používám velmi dobrý, dle mého názoru, . Dokáže však zvýraznit syntaxi stovek dalších programovacích a značkovacích jazyků a má také možnost rozšíření pomocí pluginů. Přečtěte si podrobnou recenzi tohoto skvělého programu na uvedeném odkazu.

V horní nabídce programu Poznámkový blok ++ je položka „Kódování“, kde budete mít možnost převést existující možnost na možnost, která se standardně používá na vašem webu:

V případě webu na Joomla 1.5 a vyšším, stejně jako v případě blogu na WordPress, byste měli zvolit možnost, aby se zabránilo výskytu prasklin UTF 8 bez kusovníku. Co je předpona kusovníku?

Faktem je, že když vyvíjeli kódování YUTF-16, z nějakého důvodu se rozhodli k němu připojit něco jako schopnost psát kód znaku jak v přímé sekvenci (například 0A15), tak i obráceně (150A) . A aby programy přesně pochopily, v jakém pořadí číst kódy, bylo vynalezeno kusovník(Byte Order Mark nebo jinými slovy podpis), což bylo vyjádřeno přidáním tří dalších bajtů na samotný začátek dokumentů.

V kódování UTF-8 nebyly v konsorciu Unicode poskytovány žádné kusovníky, a proto přidání podpisu (ty notoricky známé tři bajty navíc na začátku dokumentu) prostě brání některým programům ve čtení kódu. Při ukládání souborů v UTF tedy musíme vždy vybrat možnost bez kusovníku (bez podpisu). Takže jste v předstihu chránit se před plazícími se krakozyabry.

Pozoruhodné je, že některé programy ve Windows to neumí (neumí uložit text v UTF-8 bez kusovníku), například stejný notoricky známý Windows Notepad. Uloží dokument v UTF-8, ale přesto přidá podpis (tři bajty navíc) na jeho začátek. Navíc tyto bajty budou vždy stejné - čtěte kód v přímém pořadí. Ale na serverech může kvůli této maličkosti nastat problém - vyjdou podvodníci.

Proto za žádných okolností Nepoužívejte běžný poznámkový blok Windows upravovat dokumenty na svém webu, pokud nechcete, aby se objevily praskliny. Za nejlepší a nejjednodušší možnost považuji již zmíněný editor Notepad++, který nemá prakticky žádné nevýhody a skládá se pouze z výhod.

Když v programu Notepad++ vyberete kódování, budete mít možnost převést text do kódování UCS-2, které je svou povahou velmi blízké standardu Unicode. Také v poznámkovém bloku bude možné kódovat text v ANSI, tzn. ve vztahu k ruštině to bude Windows 1251, který jsme již popsali výše, odkud tato informace pochází?

Je registrováno v registru vašeho operačního systému Windows – jaké kódování zvolit v případě ANSI, které zvolit v případě OEM (pro ruský jazyk to bude CP866). Pokud v počítači nastavíte jiný výchozí jazyk, budou tato kódování nahrazena podobnými z kategorie ANSI nebo OEM pro stejný jazyk.

Poté, co uložíte dokument do programu Notepad++ v kódování, které potřebujete, nebo otevřete dokument z webu pro úpravy, uvidíte jeho název v pravém dolním rohu editoru:

Abychom se vyhnuli redneckům Kromě výše popsaných akcí bude užitečné zahrnout informace o tomto kódování do hlavičky zdrojového kódu všech stránek webu, aby nedošlo k záměně na serveru nebo místním hostiteli.

Obecně platí, že všechny hypertextové značkovací jazyky kromě Html používají speciální xml deklaraci, která specifikuje kódování textu.

Před analýzou kódu prohlížeč ví, která verze se používá a jak přesně potřebuje interpretovat kódy znaků daného jazyka. Ale co je pozoruhodné, je to, že pokud dokument uložíte ve výchozím Unicode, pak lze tuto xml deklaraci vynechat (kódování bude považováno za UTF-8, pokud neexistuje žádný kusovník, nebo UTF-16, pokud existuje kusovník).

V případě dokladu jazyk HTML používá se k označení kódování Meta prvek, který se zapisuje mezi úvodní a závěrečnou značku Head:

... ...

Tento záznam je zcela odlišný od toho, který byl přijat v roce, ale je plně v souladu s novým standardem Html 5, který se postupně zavádí, a každý, kdo jej použije, jej zcela správně porozumí aktuální okamžik prohlížeče.

Teoreticky prvek Meta s indikací HTML kódování bylo by lepší vložit dokument co nejvýše v záhlaví dokumentu aby v době, kdy narazíte na první znak v textu nepocházející ze základních ANSI (které se čtou vždy správně a v jakékoli obměně), měl prohlížeč již informaci o tom, jak kódy těchto znaků interpretovat.

Ať se vám daří! Brzy se uvidíme na stránkách blogu

Na další videa se můžete podívat na
");">

Mohlo by vás to zajímat

Co se stalo URL adresy, jaký je rozdíl mezi absolutní a relativní odkazy pro web
OpenServer - moderní lokální server a příklad jeho použití pro Instalace WordPressu do počítače
Co je to Chmod, jaká oprávnění přidělovat souborům a složkám (777, 755, 666) a jak to udělat přes PHP
Yandex vyhledávání podle webu a internetového obchodu




Nahoru