मुख्य सामग्री पर जाएँ
SubtitleMatrix

सबटाइटल से BOM हटाएँ

टेक्स्ट और स्टाइलिंगएन्कोडिंग और BOM ठीक करें
या सबटाइटल टेक्स्ट पेस्ट करें

विकल्प

BOM फ़ाइल के बिल्कुल शुरू में तीन बाइट हैं जो बताते हैं कि फ़ाइल किस एन्कोडिंग में है। हर एडिटर और प्लेयर में वह अदृश्य है, स्क्रीन पर जगह नहीं लेता, और जोड़ने या हटाने से सबटाइटल में कुछ नहीं बदलता। दो तरह के टूल उसकी परवाह करते हैं: सबटाइटल लिखने वाले Windows प्रोग्राम, जो डिफ़ॉल्ट रूप से एक डाल देते हैं, और बिल्ड पाइपलाइन के सख़्त पार्सर, जो उससे शुरू होने वाली फ़ाइल अस्वीकार करते हैं। यह पेज बॉक्स को उसी हालत में खोलता है जो उसका शीर्षक बताता है, ताकि अगर आपकी फ़ाइल दरअसल दूसरी तरह की निकले तो आप उसे पलट सकें। UTF-16 की फ़ाइल हमेशा BOM रखती है, क्योंकि पाठक उसी से जानता है कि दोनों में से कौन-सा बाइट क्रम देख रहा है — वहाँ हटाने को कहने पर भी वह बना रहता है।

टाइमिंग किस फ़्रेम रेट में गिनी गई है। फ़ॉर्मैट पेजों पर यही MicroDVD को चाहिए, क्योंकि वह टाइमिंग फ़्रेम संख्याओं में रखता है। फ़्रेम रेट पेजों पर यह वह रेट है जिसके हिसाब से फ़ाइल की टाइमिंग की गई थी — वह संस्करण जिसके लिए सबटाइटल बने थे — और पेज का दूसरा बॉक्स उस वीडियो का रेट लेता है जिसके साथ आप इन्हें इस्तेमाल करेंगे। 23.976, 24, 25, 29.97, 30, 50, 59.94 और 60 आम हैं। गलत होने पर पूरी टाइमलाइन खिसक जाती है, और फ़्रेम रेट पेजों पर वह एक अनुपात से खिसकती है, तय मात्रा से नहीं।

यह पेज सबटाइटल फ़ाइल के शुरू से BOM हटाता है — वह अदृश्य यूनिकोड चिह्न जो कुछ टूल जोड़ देते हैं और कुछ दूसरे टूल उसे पाठ का हिस्सा मानकर गलत पढ़ते हैं। हटाने के बाद फ़ाइल का पाठ, टाइमकोड, पंक्ति एंडिंग और ढाँचा वैसे ही रहते हैं; जाता केवल शुरू का चिह्न है।

BOM की समस्या यह है कि वह दिखता नहीं, पर कुछ जगह असली अक्षर बन जाता है। पहले क्यू के टाइमकोड से पहले का अदृश्य चिह्न कुछ पाठकों को अंक पढ़ने से रोक सकता है, और उस क्यू को “टाइमकोड नहीं मिला” की तरह छोड़ सकता है। कुछ स्क्रिप्ट और नियमित अभिव्यक्तियाँ भी उसे पहले अक्षर के तौर पर देखती हैं, इसलिए `^1` जैसा मिलान असफल हो जाता है। यह पेज उसे जड़ से हटाता है ताकि ऐसी समस्याएँ पैदा ही न हों।

एक ज़रूरी अपवाद है और पेज उसे खुद सँभालता है: UTF-16 फ़ाइल में शुरू का BOM हटाना ठीक नहीं, क्योंकि वहाँ वह सजावट नहीं, बाइट-क्रम बताने का संरचनात्मक हिस्सा है। अगर उसे हटा दिया जाए तो पाठक को यह पता नहीं चलेगा कि दो-बाइट अक्षर किस क्रम में पढ़े जाएँ और फ़ाइल कचरा बन सकती है। इसलिए यह पेज UTF-16 में चिह्न को नहीं छेड़ता — वह साफ़ बताता है कि फ़ाइल का BOM उसका ढाँचा है, न कि अतिरिक्त चिह्न।

अगर फ़ाइल में BOM है ही नहीं तो कुछ नहीं बदलता और फ़ाइल बाइट-दर-बाइट वैसी ही लौटती है, जो बिना काम वाले दौर का ईमानदार नतीजा है। कुछ अपलोड नहीं होता; फ़ाइल ब्राउज़र टैब के अंदर पढ़ी और लिखी जाती है।

उदाहरण

BOM वाली UTF-8 फ़ाइल

इनपुट

1
00:00:01,000 --> 00:00:02,000
The room is dark.

आउटपुट

1
00:00:01,000 --> 00:00:02,000
The room is dark.

शुरू के तीन बाइट हटते हैं और बाकी फ़ाइल वैसी ही रहती है; पहले क्यू का टाइमकोड अब किसी अदृश्य चिह्न के बिना पढ़ा जाता है। पाठ में कुछ नहीं बदलता, फ़ाइल तीन बाइट छोटी हो जाती है, और जो टूल BOM को अक्षर मानता था वह अब ठीक पढ़ेगा।

दो BOM वाली फ़ाइल

इनपुट

1
00:00:01,000 --> 00:00:02,000
Marked and Windows.

आउटपुट

1
00:00:01,000 --> 00:00:02,000
Marked and Windows.

दोनों शुरुआती चिह्न हटते हैं — पेज शुरू से जितने भी BOM मिलते हैं सब हटा देता है, इसलिए दोहरे BOM वाली फ़ाइल भी साफ़ होती है। कुछ टूल कई बार दौर चलाने पर BOM जोड़ देते हैं, और यही वह हालत है जिसमें फ़ाइल में एक से ज़्यादा बन जाते हैं; एक बार में सब हटाना उस समस्या को पूरा साफ़ करता है।

बिना BOM वाली फ़ाइल

इनपुट

1
00:00:01,000 --> 00:00:02,000
The room is dark.

आउटपुट

1
00:00:01,000 --> 00:00:02,000
The room is dark.

कुछ नहीं बदलता और फ़ाइल बाइट-दर-बाइट वैसी ही लौटती है। यह उपयोगी नतीजा है: अगर आपको संदेह था कि कहीं BOM तो नहीं, तो यह दौर बिना नुकसान के जवाब दे देता है। BOM दिखता नहीं, इसलिए पाठक से पुष्टि नहीं हो सकती — बाइट-निरीक्षक या इस दौर के नतीजे से ही पता चलता है।

अक्सर पूछे जाने वाले सवाल

सबटाइटल फ़ाइल से BOM हटाने वाला यह पेज क्या बदलता है?

फ़ाइल के सबसे शुरू से यूनिकोड BOM चिह्न (U+FEFF) हटाता है, और अगर वह कई बार जुड़ा हो तो सब हटा देता है। बाकी सब — टेक्स्ट, टाइमकोड, क्यू का क्रम, पंक्ति एंडिंग और फ़ॉर्मैट का ढाँचा — वैसा ही रहता है। अगर फ़ाइल में BOM है ही नहीं तो फ़ाइल बाइट-दर-बाइट वैसी ही लौटती है, इसलिए यह दौर बिना जोखिम के जाँच का काम भी करता है।

BOM दिखता नहीं तो पता कैसे चलेगा कि हटा या नहीं?

पाठक में खोलकर नहीं — वह चिह्न को दिखाता नहीं। फ़ाइल का आकार देखें: BOM वाली UTF-8 फ़ाइल बिना BOM वाली से ठीक तीन बाइट बड़ी होती है, इसलिए हटाने के बाद आकार तीन बाइट कम दिखेगा। या किसी बाइट-निरीक्षक में पहले तीन बाइट देखें — BOM का क्रम होता है। पेज नतीजे के साथ यह भी बताता है कि क्या हटा, इसलिए हर बार आकार नापने की ज़रूरत नहीं।

UTF-16 फ़ाइल का BOM यह पेज क्यों नहीं हटाता?

क्योंकि UTF-16 में शुरू का BOM सजावट नहीं, फ़ाइल का ढाँचा है — वह बताता है कि दो-बाइट अक्षर किस क्रम में पढ़े जाएँ, छोटे-बाइट-पहले या बड़े-बाइट-पहले। उसे हटाने से पाठक को यह पता नहीं चलेगा और फ़ाइल कचरा बन सकती है। इसलिए पेज UTF-16 में चिह्न को नहीं छेड़ता और साफ़ बताता है; अगर आपको वहाँ से BOM हटाना ही है तो पहले एनकोडिंग बदलने वाले पेज से फ़ाइल को UTF-8 में लाएँ, फिर यह दौर चलाएँ।

BOM हटाने से कुछ टूल फ़ाइल पढ़ना बंद क्यों कर देते हैं?

क्योंकि कुछ पुराने टूल UTF-8 को उसके BOM से पहचानते हैं और बिना उसके फ़ाइल को किसी और एनकोडिंग में पढ़ लेते हैं — उनके लिए BOM एक लेबल है। अगर आपका अगला टूल ऐसा है तो BOM न हटाएँ, या हटाने के बाद उसकी एनकोडिंग अपने आप बताने का रास्ता देखें। आधुनिक टूल आम तौर पर बिना BOM भी UTF-8 ठीक पढ़ते हैं, इसलिए यह समस्या कम होती जा रही है।

क्या यह पेज एनकोडिंग बदलता है या केवल BOM हटाता है?

केवल BOM हटाता है। फ़ाइल जिस एनकोडिंग में थी उसी में रहती है — UTF-8 थी तो UTF-8, Windows-1252 थी तो Windows-1252। पंक्ति एंडिंग भी नहीं बदलती। अगर आपको BOM हटाने के साथ एनकोडिंग भी बदलनी है तो दोनों पेज अलग-अलग चलाएँ; क्रम मायने नहीं रखता, पर एक साथ करने की जल्दी में यह अनुमान न लगाएँ कि एक दौर दोनों कर रहा है।

क्या BOM हटाने वाला यह पेज हर सबटाइटल फ़ॉर्मैट पर चलता है?

हाँ, साइट के सभी बारह पढ़े जाने वाले फ़ॉर्मैट पर, क्योंकि BOM बाइट्स का गुण है, फ़ॉर्मैट का नहीं — और किसी भी फ़ॉर्मैट की फ़ाइल के शुरू में यह चिह्न बैठ सकता है। जो फ़ॉर्मैट अपना कोई चिह्न रखता है, जैसे LRC का टैग, उसके साथ भी BOM उससे पहले ही रहता है और हटाने से वह अपनी जगह रहता है। फ़ॉर्मैट की संरचना इस दौर से नहीं बदलती।

संबंधित टूल