Download fajlova sa non-ascii imenima
Dakle, pitanje je vezano za veb programiranje... Da li je neko od vas imao problema sa serviranjem fajlova koji imaju neke non-ascii (unicode) karaktere u imenu? Imam situaciju da korisnici downloaduju fajlove preko neke skripte, nebitno da li se fajlovi vuku sa diska ili iz baze. Pre nego što pošaljem fajl šaljem Content-disposition HTTP header koji između ostalog navodi i ime fajla (da se korisniku ne bi pri snimanju ponudilo ime FileWriteToUser.aspx). Nažalost, Content-disposition ne podržava enkodiranje imena fajla. Probao sam sa urlencode, ali se većina brauzera ne snalazi (nude ime sa sve procentima).
Nadam se da sam bio dovoljno jasan. Kako vi rešavate ovaj problem, ako ga rešavate? Postoji li neki način osim rewrite-ovanja URL-a? |
a sto ne prebacis ime fajla da bude cisti ascii, pre nego sto ga dodas u header ?
Ionako nije zdrava ideja snimati fajlove sa non ascii znacima u imenu, jednom sam u WinXP-u imao grdnih problema da obrisem fajl cije je ime bilo cirilicno. Otvaranje i sve ostalo je radilo, ali brisanje nije htelo. |
ili, jos bolje, prilikom uploada preimenovati u nesto "normalno", i rijesio si se muke u samom startu.
|
Verovatno covek ima debeo razlog zasto je to tako kako jeste.
Mogao bi eventualno da replacujes filename pre nego sto ga strpas u header, npr sve non-ascii karaktere (zapravo, ovo je malo gruba podela.. ascii karakteri su svi od 0 do 255, a to nije ono sto hoces, siguran sam :P) replacujes sa underscore ili necim drugim, jos zgodnijim. |
Hvala na predlozima, ali ništa mi od ovog ne pije vodu. Da konvertujem ne mogu, jer konverzija nije jednoznačna (nisam nikad video neku funkciju koja ovo radi), u pitanju je višejezična aplikacija (zapravo CMS platforma) i ne zna se koji će se jezici sve koristiti. Zamena underscorovima mi takođe nije ok, pogotovu ako su svi karakteri iz imena izvan ascii (npr ćirilični).
Po svemu sudeći moraću da radim URL rewrite (ako uopšte odlučimo da pokrivamo ovaj problem). |
NE vidim sta je problem zameniti nezgodne karaktere nizom cisth asci znakova, tako da se zadrzi jednoznacnost a ostvi prostor da se restaurira tacno ime datoteke.
Ja bih recimo pre proveravao ime datoteke i ako sadrzi neki nezgodan znak, prekidao bih operaciju i korisniku prikjavljivao gresku. Treca opcija je da datotekama sam dajes imena. Ne moras zadrzavati imena koja im daju korisnici. |
@Pedja: covek je upravo naveo primer da se ime fajla moze sastojati skroz iz cirilicnih karaktera, pa bi dobio fajl koji se zove, npr ____ _ ______-____.doc.
Prilicno jasan naziv, zar ne? :D |
a da se napise funckija koja radi univerzalno prevodjenje tako sto za svaki jezik koji se koristi definises slova koja treba prevesti i njihove ascii parove (nema toga toliko puno), i onda samo pogledas koji je jezik u pitanju, ucitas parove za taj jezik i prevedes ih...
|
Heh, pre mesečak dana se pojavio sličan problem na django dev mail listi. Naime, žalio sam se što slugify js funkcija "jede" sve karaktere koji su izvan dozvoljenog ASCII opsega, te samim tim izostavlja unicode karaktere.
Baci pogled na tu diskusiju, možda dobiješ koju ideju ;) |
Citat:
|
@Pedja: da, razumem, u pravu si, ako pricamo samo o latin- i cyrilic-based charsetima, gde se vecina slova mogu prevesti u ascii ekvivalente. A sta je sa, recimo, grckim, arapskim, kineskim? Iskreno, ne verujem da ce covek imati posla sa bilo kojim od tih prevoda, ali ko zna... ;)
Da ne sirimo diskusiju, covek je shvatio sta smo hteli da kazemo. :) |
Na gorespomenutoj diskusiji se pričalo o takvim problemima, i opšti zaključak je da je tako nešto moguće (teoretski napraviti) ali zahteva prilične napore u traženju i obradi specijalnih slučajeva.
Npr, verovatno ste čuli da Jevreji pišu s desne na levu stranu - ali da li ste znali da se u njihovom pismu isti glas piše (i čita) drugačije ako se nalazi na početku, u sredini i na kraju reči? |
Off Topic: Da, ali zato imaju samo 26 slova i to bez razlike između velikih i malih. :) |
Citat:
Da pojednostavnimo: svi podaci koji se digitalizuju zapisuju se sa samo dva "znaka" jedinicom i nulom. Ako sve moze da se zapise jedinicom i nulom, valjd amoze i sa 25 znakova engleske abecede, samo ako se usvoji odredjeno pravilo po kome se vrsi konverzija. Kada uradis urlencode() upravo radis jedno takvo kodiranje. Sve je to stvar procene isplati li se to raditi i koliko je to neophodno. Postoji jos jedan prilicno dobar nacin: datoteke se cuvaju pod izgenerisanim imenima, a stvarno ime se cuva recimo u bazi, sa vezom prema datoteci kojoj to ime pripada. Generalno je ipak, najbolja opcija izbegavati specijalen znakove u imenima datoteke i ne dozvoljvati da se korsiti ista osim standardnih znakova engleske abecede, brojeva i dozvoljenih znakova interpunkcije. Citat:
|
Citat:
|
Citat:
Look-a-like: č -> c ć -> c š -> s ž -> z đ -> dj Sound-a-like: č -> ch ć -> tj š -> sh ž -> zh đ -> dj A detekcija jezika i njegovih "muzičkih želja" je tek veselje. Možda je najbolje da im vratiš sha.new(filename).hexdigest():1064: |
Petre, to o cemu pricas nije JEDNOZNACNO kodiranje.
|
Vreme je GMT +2. Trenutno vreme je 06:57. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.