Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Kódování souborů  (Přečteno 2862 krát)

paul3

  • Návštěvník
  • Příspěvků: 23
Kódování souborů
« kdy: 09 Března 2010, 09:40:49 »
Ahoj, zjistil jsem, že neznám základy. :) Jak je to s kódováním souborů a uložením znaků na počítačích?

Já chápu, že každý soubor může být buď binárka nebo textový soubor. Pokud je to textový soubor, tak může mít různé kódování znaků (UTF-8, Windows-1250 apod.). Co ovšem nechápu, kde je to "ukryto". Jak je to "fyzicky" vyřešeno.

Moje představa je zhruba taková, že každý soubor uložený na hdd má vlastně svojí hlavičku, kde je uvedeno i ono kódování, název souboru, jeho délka apod. Když poté onen soubor otevřu v textovém editoru, tak on si přečte toto kódování z hlavičky souboru a znaky v něm uvedené mi interpretuje dle uvedeného kódování. Případný "rozsypaný čaj" dostanu tehdy, pokud se neshoduje kódování v hlavičce a s uloženými znaky. Jednotlivé znaky jsou pak uloženy předpokládám jako čísla znaků oddělené nějakým metaznakem (např. $12345678 $87654321 apod.).

Předpokládám tedy, že cesta souboru je následující: hrubý formát souboru na hdd -> ovladač souborového systému (ten pracuje s onou hlavičkou souboru apod.) -> soubor, jak jej vidí systém/uživatel -> textový editor.

Nejsem si vůbec jistý... Jsem úplně vedle nebo jak to je?

Díky

Pavel Půlpán

Re: Kódování souborů
« Odpověď #1 kdy: 09 Března 2010, 10:29:57 »
Unicode a odvozená kódování hlavičky na začátku souboru mají, ale u single-byte kódovaných (ascii, cp1250, iso-8859-2, ...) souborů nejsou. Rozsypaný čaj dostaneš v případě, že editor správně nerozezná kódování dle textu.

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re: Kódování souborů
« Odpověď #2 kdy: 09 Března 2010, 10:57:38 »
Citace
Jednotlivé znaky jsou pak uloženy předpokládám jako čísla znaků oddělené nějakým metaznakem (např. $12345678 $87654321 apod.).

Jednotlivé znaky jsou uloženy v osmibitovém tvaru a zapisují se v hexadecimální (16tkové 0123456789ABCDEF) soustavě, tj od 0x00 do 0xFF. Takto lze uložit 2^8 (256) znaků.

To znamená, že při pevné délce (8bitů) nejsou potřeba žádné metaznaky na oddělování jednotlivých "písmen", prostě se odpočítá 8 jedniček a nul. Potom je na programu podle jaké tabulky přiřadí jednotlivým číslům bitmapu se znakem. Podívej se např na http://cs.wikipedia.org/wiki/Znaková_sada#ASCII , snad ti to bude jasnější.

U unicode je to trošku složitější...
« Poslední změna: 09 Března 2010, 11:04:13 od sachy »
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

donny

  • Závislák
  • ***
  • Příspěvků: 1861
Re: Kódování souborů
« Odpověď #3 kdy: 10 Března 2010, 17:01:46 »
Unicode a odvozená kódování hlavičky na začátku souboru mají, ale u single-byte kódovaných (ascii, cp1250, iso-8859-2, ...) souborů nejsou. Rozsypaný čaj dostaneš v případě, že editor správně nerozezná kódování dle textu.
Upřesním. U těch unicode tam být ta hlavička (neboli BOM = byte order mark) být nemusí, údajně ji vůbec nepoužívají POSIX systémy.
archlinux @ i7-6700/GTX1080 8G/32G DDR4/.5TB NVMe/WD RED 3TB | Raspbian 8 @ Raspberry Pi
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better!

Nemo7

  • Aktivní člen
  • *
  • Příspěvků: 163
Re: Kódování souborů
« Odpověď #4 kdy: 12 Března 2010, 12:33:06 »
Také doplním. Kódování může mít pevnou délku na jeden znak :
8 bitů = 1 byte, tj. windows-1250, ISO 8859-2)
16 bitů = 2 byte(UTF-16), 32 bitů = 4 byte (UTF-32)

Nebo může mít jeden znak proměnlivou délku (UTF-8)
So the first 128 characters (US-ASCII) need one byte. The next 1,920 characters need two bytes to encode. http://en.wikipedia.org/wiki/UTF-8

V UTF-8 tak bude mít soubor jinou velikost, pokud do něj napíšete "ěščřžýáíé" proti souboru s "escrzyaie", v kódováních s pevnou délkou budou mít oba soubory stejnou velikost.

EDIT: Tak UTF-16 je také kódování s proměnlivou délkou na znak, znak může mít 2 nebo 4 byte. :D
« Poslední změna: 12 Března 2010, 17:40:47 od Nemo7 »

 

Provoz zaštiťuje spolek OpenAlt.