2016-04-10 32 views
0

topluluğun yeni üyesi olarak, doğrudan bir Soru ile katılmak istiyorum .... Birçok yardım ve ilham veren soruları ve cevapları bulduktan sonra, şimdi bir seviyedeyim Google ile ilgili bir soruya bile ulaşamadık. Zipfile.extract kullanarak Python CGI ile Apache üzerinde kodlama

Ama geri konuya:

def unzip_dir(zipname): 
zfile = zipfile.ZipFile(zipdir + zipname) 
for name in zfile.namelist(): 
    (dirname, filename) = os.path.split(name) 
    if filename.lower().endswith('.json'): 
     if not os.path.exists(unzipdir): 
     os.makedirs(unzipdir) 
     #LASTCHANGE - IDENTIFIED PROBLEM WITH UTF 8 and ZIPfiles in APACHE (Not reproduceable in any terminal) 
     zfile.extract(name, unzipdir) 
     shutil.move(wdir+'//'+unzipdir+'//'+name, unzipdir) 

aracılığıyla Unix sistemleri üzerinde bu Running: Ben daha da işlemek isteyen bir zip dosyası yüklemeden sonra çalışan bir CGI piton komut dosyası ile bir kodlama sorunu ile mücadele

ssh gayet iyi çalışıyor.

<type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\xe4' in position 95: ordinal not in range(128) 
    args = ('ascii', u'analysis/Searchqueries-201650215T114640Z/Suchanf...nfragen/2007-01-01 Januar 2007 bis M\xe4rz 2007.json', 95, 96, 'ordinal not in range(128)') 
    encoding = 'ascii' 
    end = 96 
    message = '' 
    object = u'analysis/Searchqueries-201650215T114640Z/Suchanf...nfragen/2007-01-01 Januar 2007 bis M\xe4rz 2007.json' 
    reason = 'ordinal not in range(128)' 
    start = 95 

burada yer alır:

zfile.extract(name, unzipdir) 
Bildiğim kadarıyla ben önceki raporlarda anladığımız olarak

ve Q & A i CGI Çağrı yoluyla Web'den bu başlarsanız Ama şu hata Sorun, Apache'nin CGI'yi Python ile nasıl idare ettiğiyle ilgilidir. Python seviyesindeki (sys giriş ve çıkış bilgileri) şifrelemeyi değiştirmeye yönelik tüm girişimler veya böyle bir şey hiçbir şeye yol açmadı.

Ben de kodlama her türlü kritik doğrultusunda adı Değişken kodlamak için çalıştı ama bu esas olarak artık aynı hat zip dosyasında ilgili girişin bulamadı gerçeğine lider oldu:

<type 'exceptions.KeyError'>: "There is no item named 'Suchanfragen/Suchanfragen/2007-01-01 Januar 2007 bis M\\x84rz 2007.json' in the archive" 
    args = (r"There is no item named 'Suchanfragen/Suchanfrage...Januar 2007 bis M\x84rz 2007.json' in the archive",) 
    message = r"There is no item named 'Suchanfragen/Suchanfrage...Januar 2007 bis M\x84rz 2007.json' in the archive" 

Web sunucusunun httpd.conf dosyasını da kontrol ettim, ancak bu UTF-8'i yönlendiriyor.

Herhangi biri bana yardım eli verebilir mi? Sanırım bu çok önemsiz bir konu değil, düşüncemle sınırlı.

GÜNCELLEME: Artık ne yaptığımı bile bilmiyorum ve korkarım ki tüm sistemimi aptallığa düşürürüm. Ben şimdi yeniden başlattıktan sonra hiçbir başarı ile bazı Sanal Host alanında PassEnv denilen benim httpd.conf dosyasında bir değer eklemek için çalıştı.

GÜNCELLEME 2: Bu

sys.stdout = codecs.getwriter("utf-8")(sys.stdout) 

ama dürüst ... zip dosyası bağlamında onunla ne yapacağını hiçbir fikri çalıştı.

cevap

0

Gerçek sorunun bir yolunu bulmuşum gibi görünüyor. Ve ben şu andan itibaren iyiyim:

Dosyaları Kabuktan çıkartarak zip dosyası yöntemiyle kodlama sorunlarından kaçınırım. Bu süreçte riski artırdığımı düşünüyorum ama aslında bu erken aşamada herhangi bir ilerleme kaydetmemek yerine, beni deli ediyordum.

def unzip_dir_v2(zipname): 
if not os.path.exists(unzipdir): 
    os.makedirs(unzipdir) 
syntaxer = 'unzip -o -j -q -d' + wdir + '/' + unzipdir + ' ' + wdir + '/' + zipdir + '' + zipname 
p = subprocess.Popen(syntaxer, shell=True) 
p.communicate() #now wait 
: Burada

referans için değiştirilen bir yöntemdir