RE: [python] soubor v jiné zankové sadě

Petr Prikryl PrikrylP na skil.cz
Čtvrtek Září 29 11:11:36 CEST 2005


geon...
> pepr...
> 
> >[...] ve Windows [...] Unicode jména souborů. 
> >V souvislosti s načítáním
> >argv jsem zahlédl nějakou poznámku, že to 
> >s automatickým načítáním argv v Unicode není
> >tak jednoduché a musí se to dělat nějak 
> >explicitně. 
> >
> já to nědělám přes arg ale přes os.walk()

Myslel jsem tím, že to může být podobný problém
nedokonalé implementace. Nepředpokládal jsem,
že by to nějak souviselo s argv.

> >[...] Ono stačí, když ten soubor vyrobí
> >nějaký japonský virus, který to v Unicode
> >vyrobí třeba korektně, ale v žádném "normálním
> >kódování" to nedává smysl ;-)
> >
> ano, názvy těch souborů byly čínsky, vietnamsky 
> nebo japonsky. už jsem to smazal tedy normálně 
> (tc), ale stejně mě to zajímá, jak na to v Pythonu...
>
> Ten můj zkušební script, který takový název vytvoří, ale je čistá 
> čeština, akorát pomotané kodovaní, a stejně se nemohu dobrat 
> výsledku...

Taková simulace názvu nemusí být korektní, protože
pak asi nevznikne korektní unicode název souboru.

Nevím, co jsi přesně dělal, ale os.walk() interně
volá os.listdir(). Dokumentace k os.listdir() říká:

    On Windows NT/2k/XP and Unix, if path is 
    a Unicode object, the result will be a list 
    of Unicode objects

To znamená, že by se cesta předávaná walk() měla
uvést jako unicode řetězec. Pak by to mohlo začít
fungovat. Ale nemusí to začít fungovat na té tvé
simulaci, protože ěščřžý převedené do "nějakého"
kódování nebude tvořit korektní jméno v unicode.
Zkus to spíš nasimulovat tak, že ěščřžý soubor
vytvoříš jako unicode název souboru:

# -*- coding: cp1250 -*-
f=file(u'ěščřžýáíé','w')
f.close()

Nezkoušel jsem to, ale zajímalo by mě, jak to 
dopadlo. Zkus tenhle soubor s unicode názvem
smazat původním řešením a upraveným řešením 
s unicode cestou. Možná bude lepší zkonstruovat
přímo nějaký cizojazyčný název, protože na tomhle
by se to nemuselo projevit.

pepr



Další informace o konferenci Python