প্রদত্ত এনকোডিং সহ জিপটি সংক্ষেপণ করুন


26

আমি জিপ ফাইল (গুলি) পেয়েছি, যার মধ্যে ফাইল রয়েছে, কোন ফাইলের নামগুলি কোনও এনকোডিংয়ে রয়েছে। ধরা যাক আমি এই ফাইলগুলির নামগুলির এনকোডিং জানি, তবে কীভাবে সেগুলি সঠিকভাবে সংক্ষেপণ করতে হয় তা আমি এখনও জানি না।

উদাহরণস্বরূপ ফাইলটি এখানে , এটিতে একটি ফাইল রয়েছে "K এসএসকে 字幕 组 V ভ্যাম্পায়ার ডায়েরি 日记 日记 S06E12.ass"

আমি জানি ব্যবহৃত এনকোডিংটি GB18030 (চীনা)

প্রশ্নটি হ'ল: কীভাবে সঠিক এনকোডযুক্ত ফাইল নামটি আনজিপ বা অন্যান্য সি এল এল ইউটিলিটি ব্যবহার করে ফ্রিবিএসডি-তে সেই ফাইলটি আনপ্যাক করা যায়? আমি যা যা করতে পেরেছি সব চেষ্টা করেছিলাম, তবে ফলাফল কখনও ভাল হয় নি। সাহায্য করুন.

আমি ওএসএক্সে চেষ্টা করেছি:

MBP1:test 2ge$ bsdtar xf gb18030.zip
MBP1:test 2ge$ ls
%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12/      gb18030.zip
MBP1:test 2ge$ cd %A1%BESSK%D7%D6Ļ%D7顿The\ Vampire\ Diaries\ %CE%FCѪ%B9%ED%C8ռ%C7S06E12/
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ ls
%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12.ass*
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ find . | iconv -f gb18030 -t utf-8
.
./%A1%BESSK%D7%D6L抬%D7椤縏he Vampire Diaries %CE%FC血%B9%ED%C8占%C7S06E12.ass 
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ convmv -r -f gb18030 -t utf-8 --notest .
Skipping, already UTF-8: ./%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12.ass
Ready!

আমি আনজিপ দিয়ে একই রকম চেষ্টা করেছি, তবে আমি একই সমস্যা পেয়েছি।

ধন্যবাদ, এখন নিখরচায় বিএসডি করার চেষ্টা করছি, যেখানে আমি ওএসএক্স (টার্মিনাল) থেকে এসএসএইচ ব্যবহার করে সংযোগ করছি:

# locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=C

প্রথমটি, আমি চাই চাইনিজ নামগুলি সঠিকভাবে প্রদর্শন করা। আমি বদলে গেছি

setenv LC_ALL zh_CN.GB18030
setenv LANG zh_CN.GB18030

তারপরে আমি ফাইল ডাউনলোড করেছি এবং সঠিক অক্ষরগুলি দেখার জন্য "ls" চেষ্টা করেছি, তবে ভাগ্য নয়। সুতরাং আমি মনে করি যে সঠিক ফলাফল পেলে যাচাই করার জন্য আমাকে প্রথম চীনা স্থানীয় সমস্যা সমাধান করতে হবে, আসলে আমি এটি তুলনা করতে পারি। আপনি কি আমাকে এই সাহায্য করতে সাহায্য করতে পারেন?

উত্তর:


22

যেকোন এনকোডিংয়ে জিপ আনজিপ করতে আমি উবুন্টু 16.04 এ যা করি তা যতক্ষণ না আমি জানি যে এনকোডিংটি কী। একই পদ্ধতিটি ফ্রিবিএসডি-তে কাজ করা উচিত কারণ এটি কেবলমাত্র বহুলভাবে উপলব্ধ unzipসরঞ্জামের উপর নির্ভর করে ।

  1. আমি এনকোডিংয়ের সঠিক নামটি ডাবল-চেক করি, যাতে এটি ভুল বানান না করে: https://www.iana.org/assignments/character-sets/character-sets.xhtml

  2. আমি খালি চালাই

    $ unzip -O <encoding> <filename> -d <target_dir>
    

    অথবা

    $ unzip -I <encoding> <filename> -d <target_dir>
    

    এখানে -Oবা -Iনির্দেশাবলী অনুসারে বাছাই করা :

    $ unzip -h
    UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
      ...
      -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives
      -I CHARSET  specify a character encoding for UNIX and other archives
      ...
    

    যার অর্থ আমি কেবল চেষ্টা করি -Oএবং এটি কাজ করা উচিত, কারণ অনেক লোক .zipইউনিক্সে একটি ফাইল তৈরি করে না ...


সুতরাং, আপনার নির্দিষ্ট উদাহরণের জন্য:

  1. সঠিক এনকোডিংয়ের নাম GB18030

  2. আমি -Oপতাকাটি ব্যবহার করি এবং:

    $ unzip -O GB18030 gb18030.zip -d target_dir
    Archive:  gb18030.zip
       creating: target_dir/【SSK字幕组】The Vampire Diaries 吸血鬼日记S06E12/
      inflating: target_dir/【SSK字幕组】The Vampire Diaries 吸血鬼日记S06E12/【SSK字幕组】The Vampire Diaries 吸血鬼日记S06E12.ass
    

    ... এটি কাজ করে।


গ্রীক উইন্ডোজ দ্বারা নির্মিত জিপগুলির জন্য আমি এই পদ্ধতিটি দিয়ে এবং সিপি 737 এনকোডিংয়ের মাধ্যমে সাফল্য পেয়েছি
nddou

বলিহারি! আমি ম্যান পৃষ্ঠাটি দুবার পরীক্ষা করে দেখেছি, এটি আসলে কাজ করে তবে সম্পূর্ণ অনির্ধারিত, zsh সমাপ্তির কোনওটিরই এই প্যারামিটারটি নেই।
ttimasdf

3
unzipম্যাক ওএস এক্সে এই বিকল্প নেই এবং সর্বদা শতাংশ-এনকোডযুক্ত ফাইলের নাম তৈরি করে। @ জাভাকমের unarপরামর্শটি কবজ হিসাবে কাজ করেছে।
ফিল ক্রেলভ

দেখতে কোনও দেবিয়ান-নির্দিষ্ট কার্যকারিতা বলে মনে হচ্ছে। আমার unzipএটি বলে UnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spielerএবং এ জাতীয় বিকল্প দেয় না।
L29Ah

2
@ এল 29 এএইচ মাই unzipইন ডেবিয়ান 9 ঠিক একই সংস্করণ এবং এর মতো কোনও বিকল্প নেই no সম্ভবত উবুন্টু নির্দিষ্ট?
Arnie97

11

বেশিরভাগ পসিক্স ফাইল সিস্টেমে ফাইলের নামটি কেবলমাত্র বাইটগুলির একটি সিরিজ এবং এটির কোনও ধারণা দেওয়ার জন্য এটি ইউজারস্পেসের উপর নির্ভর করে। আপনি আপনার সুবিধার্থে এটি ব্যবহার করতে পারেন।

  1. প্রথমে, সংরক্ষণাগারটি ব্যবহার করে সংরক্ষণ করুন bsdtar, যেহেতু unzipসরঞ্জামটি ফাইলের নামগুলি ম্যাঙ্গেল করে বলে মনে হচ্ছে, যখন বিএসডিটার এগুলি কাঁচা বের করবে। (আমি এটি লিনাক্সে পরীক্ষা করছি I আমার ধারণা ফ্রিবিএসডি সবেমাত্র এটি কল করেছে tar))

    $ bsdtar xf gb18030.zip
    
  2. যাচাই করুন যে সরঞ্জামগুলি iconvসফলভাবে নামগুলি ডিকোড করতে পারে:

    $ find . | iconv -f gb18030 -t utf-8
    

    (দ্রষ্টব্য যে এটি কেবল findফাইলগুলি নয় আউটপুটকে প্রভাবিত করে ))

  3. শেষ convmvপর্যন্ত ফাইলের নামগুলি ইউটিএফ -8 এ রূপান্তর করতে ব্যবহার করুন:

    $ convmv -r -f gb18030 -t utf-8 --notest .
    

    (দ্রষ্টব্য: আমাকে জিবি ১80০৩০ সমর্থনের জন্য সিপিএএন থেকে এনকোড :: হ্যানেক্সট্রা ইনস্টল করতে হয়েছিল, এবং ম্যানুয়ালি use Encode::HanExtra;/ ইউএসআর / বিন / কনমভিতে যুক্ত করতে হবে যদিও এটি মনে করা হয়েছিল)

  4. যদি convmvঅনুপলব্ধ থাকে তবে স্ক্রিপ্ট করুন:

    $ find . -depth | while read -r old; do
        old=./$old;
        head=${old%/*};
        tail=${old##*/};
        new=$head/$(echo "$tail" | iconv -f gb18030 -t utf-8);
        [ "$old" = "$new" ] || mv "$old" "$new";
    done
    

    (কমপক্ষে লিনাক্সে এটির একটি সুবিধা রয়েছে এটি iconvপ্রায় সর্বদা উপলব্ধ এবং এটি সর্বদা gb18030 সমর্থন করে)


এই দেখার জন্য মহাকর্ষ ধন্যবাদ। আমি এখনই ওএসএক্সে পরীক্ষা করছি (তবে এটি ফ্রিবিএসডি-র কাছাকাছিই রয়েছে, এবং আমি মনে করি ফলাফলটি একই রকম হবে)। আমার প্রশ্নের মন্তব্য যুক্ত করা, এখানে সম্পাদনা করতে পারবেন না ...
2ge

1
@ 2ge: হ্যাঁ, ওএসএক্স আসলে বেশ আলাদা হতে পারে, কারণ এইচএফএস + অভ্যন্তরীণভাবে বাইটস্ট্রিংগুলি সঞ্চয় করার পরিবর্তে এনএফডি ইউটিএফ -16 এ ফাইলগুলি নাম জোর করে, সুতরাং আপনার কোনও রূপান্তর করার সুযোগ পাওয়ার আগে এটি জিবি 18030 নামগুলিকে দূষিত করবে এমন সম্ভাবনা রয়েছে।
ব্যবহারকারী1686

আমি মূল প্রশ্ন সম্পাদনা করেছি, আরও কিছু মন্তব্য যুক্ত করুন।
2ge

হ্যাঁ, আমি ম্যাকস সিয়েরায় এটি চেষ্টা করেছিলাম এবং বিএসডিটার প্রচুর "এক্সএক্সএক্সএক্স তৈরি করতে ব্যর্থ" ত্রুটি জানায় (কারণ পিতামাতার ডিরেক্টরিগুলির নাম করপুট)। আমার সংরক্ষণাগারটি একটি লিনাক্স ভিপিএসে অনুলিপি করতে হয়েছিল, এটি বের করার জন্য আনজিপ-ও ব্যবহার করুন এবং ssh -C ব্যবহার করে ফলাফলটি আমার ম্যাকের কাছে ফিরে অনুলিপি করতে পারেন।
চ্যাং কিয়ান

10

পদ্ধতি 1 : আনার ইউটিলিটি ব্যবহার করুন

sudo apt-get install unar

unar -e gb18030 gb18030.zip

পদ্ধতি 2 : ফাইলটি আনজিপ করতে পাইথন স্ক্রিপ্টটি ব্যবহার করুন (রেফারেন্স https://gist.github.com/usunyu/dfc6e56af6e6caab8018bef4c3f3d452#file-gbk-unzip-py )

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# unzip-gbk.py

import os
import sys
import zipfile
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--encoding", help="encoding for filename, default gbk")
parser.add_argument("-l", help="list filenames in zipfile, do not unzip", action="store_true")
parser.add_argument("file", help="process file.zip")
args = parser.parse_args()
print "Processing File " + args.file

file=zipfile.ZipFile(args.file,"r");
if args.encoding:
    print "Encoding " + args.encoding
for name in file.namelist():
    if args.encoding:
        utf8name=name.decode(args.encoding)
    else:
        utf8name=name.decode('gbk')
    pathname = os.path.dirname(utf8name)
    if args.l:
        print "Filename " + utf8name
    else:
        print "Extracting " + utf8name
        if not os.path.exists(pathname) and pathname!= "":
            os.makedirs(pathname)
        data = file.read(name)
        if not os.path.exists(utf8name):
            fo = open(utf8name, "w")
            fo.write(data)
            fo.close
file.close()

উদাহরণস্বরূপ gb18030.zip নিম্নলিখিত ফাইলটি নিষ্কাশন করবে

【SSK字幕组】The Vampire Diaries 吸血鬼日记S06E12
【SSK字幕组】The Vampire Diaries 吸血鬼日记S06E12/【SSK字幕组】The Vampire Diaries 吸血鬼日记S06E12.ass

2
আপনাকে ধন্যবাদ, unarপদ্ধতি সবচেয়ে ঝামেলা-মুক্ত ম্যাক OS X উপর অন্তত হয়
ফিল Krylov

4

ওএস এক্স-এ, আপনি আনআরচিভার নামক একটি জিইউআই অ্যাপ্লিকেশন ব্যবহার করতে পারেন । এটি ম্যাক অ্যাপ স্টোর বা হোমব্রু ক্যাস্ক ব্যবহার করে ইনস্টল করা যেতে পারে :

brew cask install the-unarchiver

আপনি এটির সাথে কোনও জিপ ফাইল খুললে, অ্যাপ্লিকেশন আপনাকে সংরক্ষণাগার থেকে কোনও ফাইলের পূর্বরূপ ব্যবহার করে উপযুক্ত এনকোডিং চয়ন করতে দেয়।


4

7z একটি স্যুইচ সহ চরসেট আইডি সমর্থন করে -scs, যেমন:

7z x -scs903 some.zip

যেখানে 903 হল চার্সেট। চরসেট আইডিগুলির একটি দীর্ঘ তালিকা এখানে পাওয়া যাবে


2
7z -scsস্যুইচ শুধুমাত্র @সংজ্ঞায়িত ফাইল তালিকার এনকোডিং পছন্দ করে ।
ফিল ক্রেলভ

1

ফাইলটি বের করতে 7z ব্যবহার করুন

7z x yourfile.zip

এর পরে, সেই ফাইলগুলির এনকোডিংটি নিজেকে রূপান্তর করুন:

convmv --notest -f from_encoding -t utf-8 -r your_extracted_folder/

এটি আমার পক্ষে কাজ করে .. আমার_কেন্দ্রিক কোডটি টিআইএস -620 (যা একটি থাই এনকোডিং), আপনার আপনার ভাষার একটি উপযুক্ত এনকোডিং খুঁজে বের করতে হবে। একটি জনপ্রিয় ব্যক্তি সাধারণত সমস্যাটি সমাধান করে তবে ফাইলের নামটি এখনও অপঠনযোগ্য থাকলে উইন্ডোজ -১২২২ বা শিফট-জিস (জাপানি) বা অন্য যে কোনও কিছুতে_কেনডিং থেকে পরিবর্তন করার চেষ্টা করুন, আপনি কমান্ডটি ব্যবহার করে উপলভ্য এনকোডিং তালিকাভুক্ত করতে পারেন:

convmv --list
iconv --list

এটি আমার পক্ষে "কীভাবে সমাধান করবেন" পদ্ধতিটি খুব সহজ।


0

আমি সবেমাত্র 7 জিপ ব্যবহার করেছি এবং এটি সঠিক এনকোডিংটি বেছে নিতে সক্ষম হয়েছে।

(এমন কিছু যা স্ট্যান্ডার্ড জিপ করতে পারে না)

তবে এটি জিইউআই সরঞ্জাম সহ উইন্ডোজে ব্যবহার করেছে। কমান্ড লাইন 7z আপনার জন্যও কাজ করবে।


এখানে 7z বাঞ্ছনীয় একটি উত্তর রয়েছে এবং আপনার উত্তর এতে আর কিছু যোগ করে না।
মেলিবিয়াস

1
হ্যাঁ, এখন আরও 7 জনের সুপারিশ করার একটি উত্তর রয়েছে। আপনি প্রায় পাঁচ মাস পরে পোস্ট করা একটি উত্তরটিতে বেরির উত্তর "আরও যুক্ত করুন" এর পক্ষে খুব কমই আশা করতে পারেন।
স্কট

@ স্কট আমার ক্ষমা, আমি ইংরেজি মাসের সংক্ষিপ্ত বিবরণ সঠিকভাবে পড়তে ব্যর্থ হয়েছি।
মেলিবিয়াস

ঠিক আছে. আপনি এটি জানতে চাইতে পারেন, আপনি যদি পৃষ্ঠার কোনও তারিখের উপরে মাউস পয়েন্টারটি রাখেন (এবং "সেখানে" হোভার করুন), এটি আপনাকে সংখ্যা হিসাবে তারিখটি প্রদর্শন করবে। (কমপক্ষে এটি কম্পিউটারে কাজ করে; লোকেরা বলে যে এটি ফোনে ভাল কাজ করে না)) এছাড়াও, প্রশ্নের নীচের ডানদিকে নীচে, আপনি "সক্রিয় পুরানো ভোট" দেখতে পাবেন। এটি উত্তর ক্রম ক্রম। আপনি যদি "প্রাচীনতম" এ ক্লিক করেন তবে আপনি উত্তরগুলি সবচেয়ে পুরানো থেকে সর্বাধিক সজ্জাতে পাবেন।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.