Fórum Ubuntu CZ/SK
Ostatní => Otevřená diskuze kolem Linuxu a OSS => Téma založeno: paul3 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
-
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.
-
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ší...
-
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.
-
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