আমি মনে করি না আপনি এমন একটি স্বতন্ত্র অ্যাপ্লিকেশন সন্ধান করছেন যা ভুলভাবে ট্যাগযুক্ত এনকোডিংগুলির নির্দিষ্ট নির্বাচনটি ঠিক করবে। সিপি 1252, ইউটিএফ -16 এবং জিবি -13030 এর মিশ্রণটি বেশ অস্বাভাবিক এবং আমি মনে করি না বিদ্যমান সফ্টওয়্যার স্বয়ংক্রিয়ভাবে এটিকে সমাধান করতে সক্ষম হবে।
সুতরাং আমি কীভাবে অজানা এনকোডিংগুলি ঠিক করবেন সে সম্পর্কে আপনার নিজের সিদ্ধান্তগুলি স্বয়ংক্রিয় করতে মুটাগেন ডাউনলোড করে একটি কাস্টম পাইথন স্ক্রিপ্ট লিখতাম। উদাহরণ স্বরূপ:
musicroot= ur'C:\music\wonky'
tryencodings= 'gb18030', 'cp1252'
import os
import mutagen.id3
def findMP3s(path):
for child in os.listdir(path):
child= os.path.join(path, child)
if os.path.isdir(child):
for mp3 in findMP3s(child):
yield mp3
elif child.lower().endswith(u'.mp3'):
yield child
for path in findMP3s(musicroot):
id3= mutagen.id3.ID3(path)
for key, value in id3.items():
if value.encoding!=3 and isinstance(getattr(value, 'text', [None])[0], unicode):
if value.encoding==0:
bytes= '\n'.join(value.text).encode('iso-8859-1')
for encoding in tryencodings:
try:
bytes.decode(encoding)
except UnicodeError:
pass
else:
break
else:
raise ValueError('None of the tryencodings work for %r key %r' % (path, key))
for i in range(len(value.text)):
value.text[i]= value.text[i].encode('iso-8859-1').decode(encoding)
value.encoding= 3
id3.save()
উপরের লিপিটি কয়েকটি অনুমান করে:
এনকোডিং 0 হিসাবে চিহ্নিত চিহ্নিত ট্যাগগুলিই ভুল। (সম্ভবতঃ এনকোডিং 0 হ'ল আইএসও -8859-1, তবে অনুশীলনে এটি প্রায়শই একটি উইন্ডোজ ডিফল্ট কোড পৃষ্ঠা হয়))
যদি কোনও ট্যাগ ইউটিএফ -8 বা কোনও ইউটিএফ -16 এনকোডিং হিসাবে চিহ্নিত থাকে তবে এটি সঠিক বলে ধরে নেওয়া হয় এবং এটি ইতিমধ্যে যদি না হয় তবে কেবল ইউটিএফ -8 এ রূপান্তরিত হয়। ব্যক্তিগতভাবে আমি ইউটিএফ হিসাবে চিহ্নিত ID3 গুলি (এনকোডিংগুলি ১-২) এর আগে ত্রুটিতে দেখিনি। ভাগ্যক্রমে এনকোডিং 0 এর আসল বাইটগুলিতে পুনরুদ্ধার করা সহজ কারণ আইএসও -8859-1 হ'ল সাধারণ বাইট মানগুলির 1-থেকে -1 সরাসরি ম্যাপিং।
যখন কোনও এনকোডিং 0 ট্যাগটি পূরণ করা হয়, স্ক্রিপ্টটি এটিকে প্রথমে GB18030 হিসাবে পুনরায় পোস্ট করার চেষ্টা করে, তবে যদি এটি বৈধ না হয় তবে কোড পৃষ্ঠা 1252 এ ফিরে আসে c এনকোডিংগুলির তালিকা শেষে চেষ্টা করুন।
আপনার যদি অন্য এনকোডিংগুলি থাকে যেমন সিপি 1251 সিরিলিক, বা একাধিক উচ্চারণযুক্ত অক্ষর সহ সিপি 1252 ফাইল নাম, যা জিবি 18030 এর জন্য ভুল হয়ে যায়, আপনার কোনও ধরণের অ্যালগরিদম অনুমান করার জন্য ক্লিভের দরকার হবে। ফাইলের নামটি দেখে অনুমান করার জন্য কোন ধরণের চরিত্রের উপস্থিতি সম্ভবত রয়েছে?
mid3v2
অর্ধেক সমাধান। এটি চেষ্টা করার পরে, আমি যে ভুল সনাক্তকারী এনকোডিংগুলি ভুগছি তার সাথে অবশ্যই এটি ভাল নয়, অর্থাত্ একটি আপগ্রেড আইডি 3 ট্যাগটি এখনও আমরোকের মধ্যে ভুল প্রদর্শন করে। মুটাগেন আমার মূল ব্যর্থতাটি "মূল এনকোডিংটি নির্ধারণের বিষয়ে স্মার্ট" সম্পর্কে ব্যর্থ হয়; এটি নির্দ্বিধায় অনুমান করেLatin1
/Windows-1252
, যা মানসম্পন্ন, তবে অগোছালো বাস্তব বিশ্বের জন্য অকেজো। আমি এই মুহূর্তে এই উত্তরটি গ্রহণ না করার জন্য ঝোঁক; অন্যান্য উত্তরের জন্য আমি আরও কয়েক দিনের সুযোগ দেব। যদি ভাল কিছু না আসে তবে আপনি গ্রহণ করবেন।