2012-12-20 28 views
6

मेरी वेबसाइट में मेरे पास उपयोगकर्ताओं द्वारा अपलोड की गई सभी छवियां डाउनलोड करने का विकल्प है। समस्या हेब्रू नामों वाली छवियों में है (मुझे फ़ाइल का मूल नाम चाहिए)। मैंने फ़ाइल नामों को डीकोड करने का प्रयास किया लेकिन यह मदद नहीं कर रहा है।यूटीएफ -8 फ़ाइल नामों के साथ ज़िप फ़ाइल

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

बाद UTF-8 एन्कोडिंग मैं इस तरह हिब्रू फ़ाइल नाम मिलता है:: यह एक कोड है। ?????? जेपीजी कहाँ मेरी गलती है?

+0

नया 'ज़िपेंट्री' क्या है? मुझे इस बारे में पता नहीं है कि यह नए 'System.IO.Compression' नामस्थान का हिस्सा है। j #? – efkah

+0

यह आईसीएसएचआरपी कोड है .harpZipLib.Zip लाइब्रेरी –

उत्तर

1

यूनिकोड (यूटीएफ -8 बाइनरी एन्कोडिंग में से एक है) अन्य 8-बिट एन्कोडिंग की तुलना में अधिक वर्णों का प्रतिनिधित्व कर सकता है। इसके अलावा, आप एक उचित रूपांतरण नहीं कर रहे हैं लेकिन फिर से व्याख्या कर रहे हैं, जिसका अर्थ है कि आप अपने फ़ाइल नामों के लिए कचरा प्राप्त करते हैं। आपको वास्तव में Joel on Unicode से आलेख पढ़ना चाहिए।

...

अब जब कि तुम लेख, आपको पता होना चाहिए कि C# स्ट्रिंग में, यूनिकोड डेटा स्टोर कर सकते हैं तो आप शायद file.Name के किसी भी रूपांतरण करने की ज़रूरत नहीं है और यह सीधे पारित कर सकते हैं पढ़ा है ZipEntry कन्स्ट्रक्टर में यदि पुस्तकालय में एन्कोडिंग हैंडलिंग बग नहीं है (यह हमेशा संभव है)।

+0

हाय। उत्तर और लेख के लिए धन्यवाद। अगर मैं एन्कोडिंग ब्लॉक निष्पादित नहीं करता हूं तो मेरे पास मेरे ज़िप में फ़ाइल नाम हैं: ëàâàüëò Çàîé_1.jpg –

0

आप गलत रूपांतरण कर रहे हैं, क्योंकि सी # में स्ट्रिंग पहले से ही यूनिकोड हैं। संग्रह में फ़ाइल नामों की जांच के लिए आप किस टूल का उपयोग करते हैं? डिफ़ॉल्ट रूप से विंडोज ज़िप कार्यान्वयन फ़ाइल नामों के लिए सिस्टम डॉस एन्कोडिंग का उपयोग करते हैं, जबकि अन्य कार्यान्वयन अन्य एन्कोडिंग का उपयोग कर सकते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^