DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Programiranje (http://www.devprotalk.com/forumdisplay.php?f=23)
-   -   Download fajlova sa non-ascii imenima (http://www.devprotalk.com/showthread.php?t=1184)

jablan 30. 06. 2006. 10:23

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?

ivanhoe 30. 06. 2006. 18:15

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.

oliver 30. 06. 2006. 21:34

ili, jos bolje, prilikom uploada preimenovati u nesto "normalno", i rijesio si se muke u samom startu.

zextra 30. 06. 2006. 23:15

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.

jablan 02. 07. 2006. 09:27

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).

Pedja 02. 07. 2006. 11:51

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.

zextra 02. 07. 2006. 12:11

@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

ivanhoe 02. 07. 2006. 15:34

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...

Petar Marić 02. 07. 2006. 22:15

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 ;)

Pedja 03. 07. 2006. 00:52

Citat:

Originalno napisao zextra
@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

Obrati paznju da sam govorio o zameni problematicnih znakova odgovarajucim nizom citkih a ne da svi budu zamenjeni jednim te istim kao u tvom primeru.

zextra 03. 07. 2006. 03:06

@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.

:)

Petar Marić 03. 07. 2006. 11:55

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?

jablan 03. 07. 2006. 12:17

Off Topic: Da, ali zato imaju samo 26 slova i to bez razlike između velikih i malih. :)

Pedja 03. 07. 2006. 14:36

Citat:

Originalno napisao zextra
@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... ;)

Ma ja i ne pricam o takvoj konverziji vec o jednoznacnoj konverziji.

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:

Originalno napisao Petar Marić
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?

Kako se cit anije bitno posto je ime datoteke zapisano, pa je samo problem kako to sto je zapisano sacuvati.

jablan 03. 07. 2006. 15:18

Citat:

Originalno napisao Pedja
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.

Ja i čuvam datoteke pod izgenerisanim imenima, a u bazi unicode originale. Problem mi se javlja kad šaljem fajlove nazad korisnicima.

Petar Marić 03. 07. 2006. 18:58

Citat:

Originalno napisao Pedja
Kako se cita nije bitno posto je ime datoteke zapisano, pa je samo problem kako to sto je zapisano sacuvati.

Ne bih se složio, ako koristiš sound-a-like tip prevoda onda ti je prilično bitno kako se glas čita. Nisu svi imali Vuka ;)

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:

Pedja 03. 07. 2006. 22:18

Petre, to o cemu pricas nije JEDNOZNACNO kodiranje.


Vreme je GMT +2. Trenutno vreme je 08:07.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.