محتوای آموزشی وبلاگ نتآرام
فایل ZIP سالم دانلود میشود و باز هم میشود، اما نام فایلهای فارسی داخل آن پس از استخراج به علامت سؤال یا حروف نامفهوم تبدیل میشود. معمولاً محتوای فایل و نام آن دو موضوع متفاوتاند. برنامه سازنده آرشیو نام را با یک کدگذاری نوشته و ابزار استخراج ممکن است آن را با روش دیگری بخواند.
این مشکل با نام پیشنهادی خود فایل دانلود در مرورگر فرق دارد. اینجا درباره نام اعضای داخل ZIP صحبت میکنیم. اول نسخه اصلی آرشیو را نگه میداریم و بررسی میکنیم نام از ابتدا خراب ذخیره شده یا فقط ابزار استخراج آن را اشتباه نمایش میدهد.
۱. نسخه اصلی و منبع مطمئن را حفظ کنید
فایل ZIP اصلی را رونویسی یا حذف نکنید. اگر از اینترنت دریافت شده، پیش از بازکردن مطمئن شوید فرستنده و منبع را میشناسید. استخراج فایل ناشناس میتواند خطر امنیتی و مصرف شدید فضا داشته باشد؛ نامها را ببینید، اما فایل اجرایی ناشناس را اجرا نکنید.
اندازه و هش دانلود را با مقدار اعلامشده از منبع معتبر مقایسه کنید. در PowerShell ویندوز:
کد / دستورGet-FileHash -Algorithm SHA256 -LiteralPath 'C:/Downloads/archive.zip'
مسیر نمونه را عوض کنید. برابر بودن هش با مقدار معتبر نشان میدهد فایل دانلودشده همان فایل اعلامشده است؛ به تنهایی امن بودن یا درست بودن نامهای داخل آرشیو را ثابت نمیکند.
۲. نامها را پیش از استخراج در دو ابزار مقایسه کنید
ZIP را در ابزار استخراج معتبر و بهروز باز کنید و فقط فهرست نامها را ببینید. همان آرشیو را با ابزار دیگر یا روی سیستمعامل دیگر هم بررسی کنید. اگر یک ابزار نام را درست نشان میدهد و دیگری نه، مشکل احتمالاً در روش خواندن نامهاست. از ابزاری استفاده کنید که نامها را درست نمایش میدهد و یک پوشه آزمایشی خالی برای استخراج انتخاب کنید.
اگر در هر دو ابزار نامها از قبل
???? هستند، ممکن است نویسهها هنگام ساخت آرشیو واقعاً از دست رفته باشند. در این حالت حدس نام اصلی از فایل خراب قابل اطمینان نیست؛ از فرستنده بخواهید آرشیو را از فایلهای اصلی دوباره بسازد.برای مقایسه، یک فایل کوچک با نام فارسی شناختهشده را جداگانه در مبدأ فشرده کنید و همان ZIP آزمایشی را در مقصد باز کنید. اگر این نمونه سالم است ولی آرشیو قدیمی نیست، اختلاف در روش ساخت یا نامهای ذخیرهشده آرشیو قبلی محتملتر است. این آزمایش را با اطلاعات غیرمحرمانه انجام دهید و نسخه اصلی را دستنخورده نگه دارید.
۳. مفهوم کدگذاری را با یک آزمایش غیرتخریبی ببینید
ZIP میتواند نامها را به روش استاندارد UTF-8 علامتگذاری کند. آرشیوهای قدیمیتر گاهی نام را با کدصفحه محلی ذخیره کردهاند. در Python نسخه ۳٫۱۱ و جدیدتر میتوانید برای خواندن نامها یک کدگذاری احتمالی را آزمایش کنید؛ این مثال هیچ فایلی را استخراج نمیکند:
کد / دستورimport zipfile
with zipfile.ZipFile("archive.zip", metadata_encoding="cp1256") as archive:
for name in archive.namelist()[:20]:
print(repr(name))
فایل
archive.zip باید در پوشه فعلی باشد یا مسیر واقعی جایگزین شود. cp1256 فقط یک احتمال برای بعضی محیطهای فارسی است و نسخه درست برای همه آرشیوها نیست. اگر نامها معنیدار نشدند، از سازنده درباره ابزار و کدگذاری مبدأ بپرسید. پرچم UTF-8 ثبتشده در خود ZIP بر این گزینه اولویت دارد؛ این تنظیم نمیتواند نامی را که پیشتر به علامت سؤال تبدیل شده بازسازی کند.برای دیدن نسخه پایتون در ترمینال:
کد / دستورpython3 --version
در نسخههای قبل از ۳٫۱۱، گزینه
metadata_encoding در کتابخانه استاندارد وجود ندارد. استفاده از یک ابزار استخراج سازگار یا دریافت آرشیو سالم، از تغییر کورکورانه فایل اصلی امنتر است.۴. اگر فایلهای اصلی را دارید، ZIP تازه بسازید
روی رایانه مبدأ، نام فایلهای اصلی را پیش از فشردهسازی ببینید. با نسخه معتبر و بهروز ابزار آرشیو، یک ZIP جدید با نام متفاوت بسازید و آن را ابتدا در همان رایانه باز کنید. سپس یک کپی را روی سیستمعامل یا ابزار دیگر استخراج و نامها و چند فایل نمونه را بررسی کنید.
فایل ZIP جدید را با نام نسخهدار به هاست دانلود منتقل کنید. قبل از تغییر لینک عمومی، هش فایل مبدأ و فایل روی هاست را مقایسه کنید. اگر هنگام انتقال ZIP خراب میشود، راهنمای حالت Binary در FTP را بخوانید. نام فایل داخل آرشیو با تغییر
Content-Disposition سرور اصلاح نمیشود.۵. نتیجه را با کاربر نهایی تأیید کنید
نسخه نهایی را از لینک عمومی دانلود و در پوشه آزمایشی خالی استخراج کنید. چند نام فارسی، پسوندها و محتوای مجاز را با نسخه اصلی مقایسه کنید. اگر فقط نام خود ZIP در پنجره ذخیره خراب است، راهنمای نام فارسی دانلود مسئله متفاوتی را حل میکند.
اطلاعات هاست دانلود نتآرام و توضیح کدگذاری اعضای ZIP در مستندات Python در دسترس است.
برچسبها:
اشتراکگذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
