मुझे नहीं लगता कि आप एक स्टैंडअलोन एप्लिकेशन ढूंढने जा रहे हैं जो आपके विशेष रूप से गलत तरीके से टैग किए गए एनकोडिंग के चयन को ठीक करेगा। Cp1252, UTF-16 और GB-18030 का मिश्रण होना काफी असामान्य है और मुझे नहीं लगता कि मौजूदा सॉफ्टवेयर अपने आप इसे हल कर पाएगा।
इसलिए मैं Mutagen डाउनलोड करूंगा और अज्ञात एनकोडिंग को ठीक करने के बारे में अपने स्वयं के निर्णयों को स्वचालित करने के लिए एक कस्टम पायथन स्क्रिप्ट लिखूंगा। उदाहरण के लिए:
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 ISO-8859-1 है, लेकिन व्यवहार में यह अक्सर एक विंडोज डिफ़ॉल्ट कोड पेज होता है।)
यदि कोई टैग UTF-8 या UTF-16 एन्कोडिंग में होने के रूप में चिह्नित है, तो इसे सही माना जाता है, और यदि यह पहले से ही नहीं है, तो बस इसे UTF-8 में बदल दिया जाता है। व्यक्तिगत रूप से मैंने पहले आईडी 3 एस को यूटीएफ के रूप में चिह्नित नहीं किया है (1-3) (त्रुटि से पहले 1-3)। सौभाग्य से एन्कोडिंग 0 अपने मूल बाइट्स में पुनर्प्राप्त करना आसान है क्योंकि आईएसओ-8859-1 एक 1-टू -1 डायरेक्ट ऑर्डिनल बाइट मानों का मानचित्रण है।
जब एन्कोडिंग 0 टैग पूरा हो जाता है, तो स्क्रिप्ट इसे पहले GB18030 के रूप में पुन: उपयोग करने का प्रयास करती है, फिर यदि यह मान्य नहीं है तो कोड 1252 पृष्ठ पर वापस आ जाएगी। cp1252 जैसे एकल-बाइट एन्कोडिंग अधिकांश बाइट अनुक्रमों का मिलान करेंगे, इसलिए उन्हें रखना सबसे अच्छा है। प्रयास करने के लिए एन्कोडिंग की सूची के अंत में।
यदि आपके पास cp1251 सिरिलिक जैसे अन्य एनकोडिंग हैं, या एक पंक्ति में कई उच्चारण पात्रों के साथ cp1252 फ़ाइलनाम हैं, जो GB18030 के लिए गलत हो जाता है, तो आपको किसी प्रकार के एक चतुर अनुमानक एल्गोरिदम की आवश्यकता होगी। शायद यह देखने के लिए फ़ाइल नाम देखें कि किस प्रकार के पात्रों के मौजूद होने की संभावना है?
mid3v2
केवल आधा समाधान है। इसे आज़माने के बाद, यह निश्चित रूप से गलत नहीं है कि मैं जिस अतिक्रमण से पीड़ित हूं, वह गलत नहीं है, अर्थात एक उन्नत ID3 टैग अभी भी अमारोक में गलत प्रदर्शित करता है। Mutagen मेरी ज़रूरत को विफल करता है »मूल एन्कोडिंग का पता लगाने के बारे में स्मार्ट«; यह blithely मानता हैLatin1
/Windows-1252
, जो मानक अनुरूप है, लेकिन गन्दा वास्तविक दुनिया के लिए बेकार है। मैं अभी इस उत्तर को स्वीकार नहीं करने के लिए इच्छुक हूं; मैं अन्य उत्तरों के लिए कुछ और दिनों का अवसर दूंगा। अगर कुछ भी अच्छा नहीं आता है, तो आप स्वीकार कर लेते हैं।