2012-12-20 12 views
6

Web sitemde kullanıcılar tarafından yüklenen tüm resimleri indirme seçeneğim var. Sorun, İbranice isimleriyle görüntülerde (orijinal dosya adına ihtiyacım var). Dosya isimlerini çözmeyi denedim ama bu yardımcı olmuyor. utf-8 kodlama sonrautf-8 dosya adlarına sahip bir ZIP dosyası

using ICSharpCode.SharpZipLib.Zip; 

Encoding iso = Encoding.GetEncoding("ISO-8859-1"); 
Encoding utf8 = Encoding.UTF8; 
byte[] utfBytes = utf8.GetBytes(file.Name); 
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes); 
string name = iso.GetString(isoBytes); 

var entry = new ZipEntry(name + ".jpg"); 
zipStream.PutNextEntry(entry); 
using (var reader = new System.IO.FileStream(file.Name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    byte[] buffer = new byte[ChunkSize]; 
    int bytesRead; 
    while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     byte[] actual = new byte[bytesRead]; 
     Buffer.BlockCopy(buffer, 0, actual, 0, bytesRead); 
     zipStream.Write(actual, 0, actual.Length); 
    } 
} 

ben böyle ibranice dosya adları olsun: Burada bir koddur. ?????? jpg nerede hata mı?

+0

Yeni bir "ZipEntry" nedir? Yeni 'System.IO.Compression' ad alanının bir parçası olduğunun farkında değilim. j #? – efkah

+0

Bu, ICSharpCode.SharpZipLib.Zip kütüphanesidir –

cevap

1

Unicode (UTF-8, ikili kodlamalardan biridir) diğer 8 bit kodlamadan daha fazla karakteri temsil edebilir. Dahası, doğru bir dönüşüm yapmıyorsunuz, ancak yeniden yorumlama yapıyorsunuz, bu da dosya adlarınız için çöp aldığınız anlamına geliyor. Makaleyi gerçekten Joel on Unicode'dan okumalısınız.

... Şimdi makaleyi, size muhtemelen file.Name herhangi dönüşüm yapmak gerekmez böylece C# dizede, unicode verileri saklayabilir bilmeli ve doğrudan bu geçebilir okudum o

Kütüphane, kodlama işleme hataları içermiyorsa (bu her zaman mümkündür) ZipEntry yapıcıya.

+0

Merhaba. Cevap ve makale için teşekkürler. Kodlama bloğunu yürütmüyorsam, zipimde dosya adları şöyle olur: ëàâàüëò Çàîé_1.jpg –

0

C# içindeki dizeler zaten unicode olduğu için yanlış dönüşüm yapıyorsunuz. Dosya adlarını arşivde kontrol etmek için hangi araçları kullanıyorsunuz? Varsayılan olarak, Windows ZIP uygulamaları dosya adları için sistem DOS kodlamasını kullanır, diğer uygulamalar ise diğer kodlamaları kullanabilir.

İlgili konular