Autor Zpráva
1Pupik1989
Profil
Zdravím všechny na diskusi.

Mám takovou záludnou otázku. Netuší někdo, jak Deflate ukládá diakritiku? Konkrétně je to komprimováno LZ77 (BTYPE 01).
Googlil jsem googlil, ale nevygooglil. V RFC-1951 o tom není ani zmínka. Wikipedie je také marná.

Zkrátka po dekompresi pomocí Inflate mi vyjde, že "ě" má kód "236", což je nesmysl, protože má kód "283". Mám to zabaleno GZipem ve verzi 1.3.2.

Kdyby někdo věděl, tak budu hodně moc vděčný, začínám být v koncích.
juriad
Profil
1Pupik1989:
LZ77 je definováno na úrovni bytů nikoli znaků. To je také důvod, proč dokáže komprimovat i ne-texty.

V případě toho znaku ě, ten nikdy není zakódován jako 283 (to je jeho kód v Unicode před vlastní úložnou reprezentací), v případě fyzické reprezentace v UTF-8 (což je jedna z možností v připadě Unicode) je znak ě zapsán jako 2 byty: 0xC4 0x9B

Ale v windows-1250 má kupodivu ě kód 236. :-)
1Pupik1989
Profil
Samozřejmě LZ77 řeším na úrovni bytů řeším, vzhledem k tomu, že mám načtený soubor jako pole bytů.

Máš pravdu, teď koukám na znakovou tabulku. Teď jen vymyslet, jak znaky sjednotit do jednoho kódování. Chtěl bych na to jít cestou nejmenšího odporu.


Asi jsem se do toho trochu zamotal. Každopádně děkuji za radu. :)
_es
Profil
1Pupik1989:
Teď jen vymyslet, jak znaky sjednotit do jednoho kódování.
No veď to „v jednom kódovaní“ - windows-1250 máš. Ak potrebuješ znaky aj mimo tej znakovej sady, tak použi inú znakovú sadu či iné kódovanie.
1Pupik1989
Profil
_es:
Ak potrebuješ znaky aj mimo tej znakovej sady, tak použi inú znakovú sadu či iné kódovanie.

K tomu ale budu muset sepsat tabulku a dle hlavičky GZipu převádět znaky, což mi připadá zbytečně zdlouhavé. Proto hledám jednodušší řešení.

//edit: Tak jsem to trochu zkoumal a kódování je ISO-8859-2.

//edit2: Bohužel záleží na systému, co tam bude za kódování.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: