Autor Zpráva
Witiko
Profil
V rámci své knihovny JStorage jsem měl v úmyslu ukládaná data přejet Aritmetickým kódováním za účelem komprese. Problém je v tom, že se nezdá, že by jakákoliv z těchto technologií: localStorage, globalStorage, userData, cookies; podporovala předání jiných dat, než String. Není zde nějaká možnost, jak ovlivnit uložená data na úrovni jednotlivých bajtů alespoň u některé z těchto technologií?

U konverze daného bajtu na String a následného uložení mám obavy ze ztráty daného bajtu, pokud nepůjde o prohlížečem rozeznaný znak. Jako zvláště nespolehlivý se mi již dříve v tomto ohledu jevil MSIE, který neznámé bajty v textarea měnil automaticky na bajt 20 označující mezeru.

původní == String.fromCharCode(původní).charCodeAt(0); //Je možné důvěřovat v zachování jednotlivých bajtů?
// A co po uložení a opětovném načtení z localStorage, globalStorage, userData nebo cookies?
Witiko
Profil
Kdokoliv?
Chamurappi
Profil
Reaguji na Witika:
Není zde nějaká možnost, jak ovlivnit uložená data na úrovni jednotlivých bajtů alespoň u některé z těchto technologií?
Myslím, že není. Tedy takhle:
cookies putují přes HTTP hlavičky, které mají rády obyčejná bezdiakritická písmenka a číslice a cokoliv jiného už si koleguje o problém. Třeba znak konce řádku by ti ukončil aktuální sušenkovou hlavičku.
userData se ukládají v XML souboru a formát XML také nedovoluje používat úplně všechny znaky s kódy 0 až 31. Krom toho tam možná dochází i k nějaké normalizaci bílých znaků (odmazání zdvojených mezer a mezer na začátku/konci).
localStorage/globalStorage budou nejspíš přátelské k jakémukoliv druhu JS řetězce. Ale JS řetězec není jen tak obyčejné pole bajtů, je to shluk znaků uložený v paměti v UTF-16, pokud vím. Takže charCodeAt ti může vrátit i větší číslo než 255.
Witiko
Profil
Nj, to mě mohlo napadnout a nemusel jsem zakládat zbytečně topic. Díky. :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0