दिलचस्प पोस्ट
एक डिवाइस पर ContentProvider का उपयोग करने वाले समान ऐप को चलाने के लिए ग्रैड में बिल्ड प्रकारों का उपयोग करना क्या करता है -विबिट-ट्रांसफॉर्मः अनुवाद 3 डी (0,0,0); ठीक है? शरीर पर लागू करें? उपयोगकर्ता को डाउनलोड करने के लिए मेमोरी में एक फ़ाइल बनाएं, सर्वर के माध्यम से नहीं जावा में बाइट सरणी के लिए InputStream कन्वर्ट करें प्रतिक्रिया स्ट्रीम को पीडीएफ स्ट्रीम लिखें स्थैतिक आयात को शामिल करने के लिए एक्लिप्स ऑप्टीमाइज़ आयात एंड्रॉइड में मेनू आइटम का टेक्स्ट रंग कैसे बदल सकता है? आप अपने कोको एप्लिकेशन को डिफ़ॉल्ट वेब ब्राउज़र के रूप में कैसे सेट करते हैं? आईफोन भाषण मान्यता एपीआई? Google OAuth ताज़ा करें टोकन प्राप्त नहीं कर रहा है java.util.Date को XMLGregorianCalendar स्वयं। विविध और परिवर्तनीय अंतर App.use और app.get के बीच अंतर एक्सप्रेस.js में सूची बदलें बदलें पृष्ठभूमि – अजीब व्यवहार ब्राउज़र मेमोरी उपयोग तुलना: इनलाइन ऑनक्लिक बनाम। JQuery का उपयोग कर .बिंड ()

बीओएम के बिना यूटीएफ -8 और यूटीएफ -8 के बीच क्या अंतर है?

क्या यूटीएफ -8 और यूटीएफ -8 के बीच एक बम के बिना अलग है? कौनसा अच्छा है?

वेब के समाधान से एकत्रित समाधान "बीओएम के बिना यूटीएफ -8 और यूटीएफ -8 के बीच क्या अंतर है?"

यूटीएफ -8 बीओएम एक अनुक्रम बाइट्स (ईएफ बीबी बीएफ) है जो पाठक को एक फाइल को पहचानने की अनुमति देता है जिसे यूटीएफ -8 में एन्कोड किया जा रहा है।

आम तौर पर, बीओएम का प्रयोग एन्कोडिंग की अंत्यता को संकेत करने के लिए किया जाता है, लेकिन चूंकि यूटीएफ -8 के लिए अंतहीनता अप्रासंगिक है, बीओएम अनावश्यक है।

यूनिकोड मानक के अनुसार, UTF-8 फ़ाइलों के लिए BOM अनुशंसित नहीं है :

2.6 एन्कोडिंग योजनाएं

… एक बीओएम का उपयोग न तो आवश्यक है और न ही यूटीएफ -8 के लिए अनुशंसित है, लेकिन ऐसे संदर्भों में इसका सामना किया जा सकता है जहां यूटीएफ -8 डेटा अन्य एन्कोडिंग रूपों से परिवर्तित होता है जो एक बीओएम का उपयोग करते हैं या जहां बीओएम को यूटीएफ -8 के हस्ताक्षर के रूप में उपयोग किया जाता है । अधिक जानकारी के लिए धारा 16.8, स्पेशल में "बाइट ऑर्डर मार्क" उपधारा देखें।

अन्य उत्कृष्ट उत्तर पहले ही उत्तर दिए:

  • यूटीएफ -8 और बीओएम-एड यूटीएफ -8 के बीच कोई आधिकारिक अंतर नहीं है
  • एक BOM-ed UTF-8 स्ट्रिंग तीन निम्नलिखित बाइट्स से प्रारंभ होगा। EF BB BF
  • उन बाइट्स, अगर मौजूद हैं, को फ़ाइल / स्ट्रीम से स्ट्रिंग निकालने पर ध्यान नहीं दिया जाना चाहिए।

लेकिन, अतिरिक्त जानकारी के रूप में, UTF-8 के लिए BOM "गंध" का एक अच्छा तरीका हो सकता है यदि स्ट्रिंग को यूटीएफ -8 में एन्कोड किया गया था … या यह किसी अन्य एन्कोडिंग में वैध स्ट्रिंग हो सकता है …

उदाहरण के लिए, डेटा [ईएफ बी बी 41 41 42 43] या तो हो सकता है:

  • वैध ISO-8859-1 स्ट्रिंग "मैं» ¿एबीसी "
  • वैध यूटीएफ -8 स्ट्रिंग "एबीसी"

इसलिए जब पहली बाइट को देखकर फाइल सामग्री की एन्कोडिंग को पहचानना अच्छा हो सकता है, तो आपको इस पर भरोसा नहीं करना चाहिए, जैसा ऊपर दिए गए उदाहरण के अनुसार दिखाया गया है

एन्कोडिंग्स जानी जानी चाहिए, divined नहीं

यूटीएफ -8 एन्कोडेड फाइलों में बीओएम लगाने में कम से कम तीन समस्याएं हैं।

  1. जिन फ़ाइलों को कोई टेक्स्ट नहीं है वे अब रिक्त नहीं हैं क्योंकि वे हमेशा BOM होते हैं।
  2. यूटीएफ -8 के एएससीआईआई सबसेट के भीतर आने वाली फ़ाइलें अब एएससीआईआई नहीं हैं, क्योंकि बीओएम एएससीआईआई नहीं हैं, जो कुछ मौजूदा टूल्स को तोड़ते हैं, और उपयोगकर्ताओं को ऐसे विरासत के औजारों की जगह लेना असंभव हो सकता है।
  3. कई फाइलों को एक साथ जोड़ना संभव नहीं है क्योंकि प्रत्येक फाइल में अब शुरुआत में एक BOM है

और, जैसा कि दूसरों ने उल्लेख किया है, यह न तो पर्याप्त है और न ही आवश्यक है कि यह पता लगाने के लिए कि कुछ यूटीएफ -8 है,

  • यह पर्याप्त नहीं है क्योंकि एक मनमाना बाइट अनुक्रम सही क्रम से शुरू हो सकता है जो कि BOM का गठन करता है।
  • यह आवश्यक नहीं है क्योंकि आप बस बाइट्स पढ़ सकते हैं जैसे कि वे यूटीएफ -8 थे; यदि वह सफल होता है, तो यह परिभाषा के अनुसार, वैध यूटीएफ -8 है

बीओएम के बिना यूटीएफ -8 और यूटीएफ -8 के बीच क्या अंतर है?

संक्षिप्त उत्तर: यूटीएफ -8 में, फ़ाइल की शुरुआत में एक बीओएम को बाइट्स EF BB BF रूप में एन्कोड किया गया है।

लंबा जवाब:

मूलतः, यह उम्मीद थी कि यूनिकोड को यूटीएफ -16 / यूसीएस -2 में एनकोड किया जाएगा। बीओएम इस एन्कोडिंग फॉर्म के लिए डिज़ाइन किया गया था। जब आपके पास 2-बाइट कोड इकाइयां हों, तो यह इंगित करना आवश्यक है कि उन दो बाइट्स में कौन से ऑर्डर हैं, और ऐसा करने के लिए एक आम सम्मेलन में डेटा के आरंभ में "यूके + FEFF" को "बाइट ऑर्डर मार्क" के रूप में शामिल करना है। चरित्र U + FFFE को स्थायी रूप से अनअसाइन किया गया है ताकि उसकी मौजूदगी गलत बाइट क्रम का पता लगाने के लिए उपयोग की जा सके।

यूटीएफ -8 के प्लेटफ़ॉर्म एंडियननेस की परवाह किए बिना एक ही बाइट क्रम है, इसलिए एक बाइट ऑर्डर मार्क की आवश्यकता नहीं है। हालांकि, यह यूटीएफ -16 से यूटीएफ -8 में परिवर्तित किया गया डेटा में बाइट अनुक्रम EF BB FF रूप में हो सकता है, या "यूटीएफ -8" डेटा के संकेत के लिए "हस्ताक्षर" के रूप में हो सकता है

कौनसा अच्छा है?

के बग़ैर। मार्टिन कॉट ने उत्तर दिया, युनिकोड मानक इसकी सिफारिश नहीं करता है। यह गैर- BOM- अवगत सॉफ़्टवेयर के साथ समस्याओं का कारण बनता है

यह पता लगाने का एक बेहतर तरीका है कि फ़ाइल UTF-8 है वैधता जांच करने के लिए यूटीएफ -8 के सख्त नियम हैं कि बाइट अनुक्रम क्या मान्य हैं, इसलिए एक गलत सकारात्मक की संभावना नगण्य है। अगर एक बाइट अनुक्रम यूटीएफ -8 जैसा दिखता है, तो यह संभवतया है।

यह कई अच्छे उत्तर के साथ एक पुराना प्रश्न है लेकिन एक बात को जोड़ा जाना चाहिए।

सभी जवाब बहुत सामान्य हैं मैं जो जोड़ना चाहता हूं, वह बम उपयोग के उदाहरण हैं जो वास्तव में वास्तविक समस्याएं पैदा करते हैं और फिर भी बहुत से लोग इसके बारे में नहीं जानते हैं

बीओएम स्क्रिप्ट को तोड़ता है

शेल स्क्रिप्ट, पर्ल स्क्रिप्ट, पायथन स्क्रिप्ट, रुबी स्क्रिप्ट, नोड। जेएस स्क्रिप्ट या किसी अन्य निष्पादन योग्य, जिसे एक दुभाषिया द्वारा चलाने की जरूरत है – एक शेबांग लाइन से शुरू होती है जो उन में से एक जैसा दिखता है:

 #!/bin/sh #!/usr/bin/python #!/usr/local/bin/perl #!/usr/bin/env node 

यह ऐसी व्यवस्था को बताता है कि ऐसी स्क्रिप्ट का उपयोग करते समय दुभाषिया को चलाने की जरूरत होती है। यदि स्क्रिप्ट को यूटीएफ -8 में एन्कोड किया गया है, तो एक को शुरुआत में एक BOM को शामिल करने का मोहक हो सकता है लेकिन वास्तव में "#!" अक्षर सिर्फ अक्षर नहीं हैं वे वास्तव में एक जादू संख्या है जो दो एएससीआईआई वर्णों से बना है। यदि आप उन पात्रों से पहले कुछ (जैसे बीओएम) डालते हैं, तो फ़ाइल ऐसा दिखेगी कि इसकी एक अलग जादू संख्या है और इससे समस्याएं हो सकती हैं

विकिपीडिया देखें, लेख: शेबांग, अनुभाग: मैजिक नंबर :

शेबांग वर्णों को यूटीएफ -8 सहित विस्तारित एएससीआईआई एन्कोडिंग में एक ही दो बाइट्स द्वारा प्रतिनिधित्व किया जाता है, जो आमतौर पर वर्तमान यूनिक्स जैसी सिस्टम पर स्क्रिप्ट और अन्य टेक्स्ट फाइलों के लिए उपयोग किया जाता है। हालांकि, यूटीएफ -8 फाइल वैकल्पिक बाइट ऑर्डर मार्क (बीओएम) से शुरू हो सकती है; यदि "exec" फ़ंक्शन विशेष रूप से बाइट 0x23 और 0x21 का पता लगाता है, तो शेबांग से पहले BOM (0xEF 0xBB 0xBF) की उपस्थिति स्क्रिप्ट interpreter को निष्पादित होने से रोकी जाएगी। कुछ अधिकारियों ने पीओएसआईएसआईएस (यूनिक्स-जैसी) स्क्रिप्ट्स में बाइट ऑर्डर मार्क का उपयोग करने की सलाह दी है, [14] इस कारण के लिए और व्यापक अंतर और दार्शनिक चिंताओं के लिए इसके अतिरिक्त, यूटीएफ -8 में एक बाइट ऑर्डर चिह्न आवश्यक नहीं है, क्योंकि एन्कोडिंग में एंडियननेस इश्यू नहीं हैं; यह केवल यूटीएफ -8 के रूप में एन्कोडिंग की पहचान करने के लिए कार्य करता है [महत्व दिया]

बीओएम JSON में अवैध है

आरएफसी 715 9 देखें , धारा 8.1 :

कार्यान्वयन एक जेएसओएन पाठ की शुरुआत में एक बाइट आदेश चिह्न नहीं जोड़ना चाहिए।

BOM JSON में अनावश्यक है

न केवल यह JSON में गैरकानूनी है, वर्ण की एन्कोडिंग को निर्धारित करने की भी आवश्यकता नहीं है क्योंकि किसी भी JSON स्ट्रीम में वर्णित एन्कोडिंग और एंडियननेस (विवरण के लिए यह जवाब देखें) दोनों को स्पष्ट रूप से निर्धारित करने के लिए अधिक विश्वसनीय तरीके हैं।

BOM JSON पार्सर को तोड़ता है

न केवल यह JSON में अवैध है और जरूरी नहीं है , यह वास्तव में सभी सॉफ्टवेयर को तोड़ता है जो आरएफसी 4627 में प्रस्तुत पद्धति का उपयोग करके एन्कोडिंग निर्धारित करते हैं:

जेएसएएन की एन्कोडिंग और एंडियननेस निर्धारित करना, NUL बाइट के लिए पहले 4 बाइट्स की जांच करना:

 00 00 00 xx - UTF-32BE 00 xx 00 xx - UTF-16BE xx 00 00 00 - UTF-32LE xx 00 xx 00 - UTF-16LE xx xx xx xx - UTF-8 

अब, अगर फाइल को BOM से शुरू होता है तो यह इस प्रकार दिखाई देगा:

 00 00 FE FF - UTF-32BE FE FF 00 xx - UTF-16BE FF FE 00 00 - UTF-32LE FF FE xx 00 - UTF-16LE EF BB BF xx - UTF-8 

ध्यान दें कि:

  1. यूटीएफ -32 बीई तीन एनयूएल के साथ शुरू नहीं करता है इसलिए इसे मान्यता नहीं दी जाएगी
  2. UTF-32LE पहले बाइट के बाद 3 NULs नहीं है, इसलिए इसे मान्यता नहीं दी जाएगी
  3. यूटीएफ -16 बीई के पहले 4 बाइट्स में केवल 1 एनयूएल है इसलिए इसे मान्यता नहीं दी जाएगी
  4. यूटीएफ -16LE के पहले 4 बाइट्स में केवल 1 एनयूएल है इसलिए इसे मान्यता नहीं दी जाएगी

कार्यान्वयन के आधार पर, उन सभी को गलत रूप से यूटीएफ -8 के रूप में परिभाषित किया जा सकता है और फिर गलत यूटीएफ -8 के रूप में गलत व्याख्या या खारिज कर दिया गया है, या सभी पर मान्यता नहीं दी गई है।

इसके अतिरिक्त यदि मान्य JSON के लिए कार्यान्वयन परीक्षण के रूप में मैं सुझाता है, तो यह उस इनपुट को भी अस्वीकार कर देगा जो वास्तव में यूटीएफ -8 के रूप में एन्कोड किया गया है क्योंकि यह एएससीआईआई वर्ण <128 के साथ आरएफसी के अनुसार नहीं होना चाहिए।

अन्य डेटा प्रारूप

JSON में BOM की आवश्यकता नहीं है, यह गैरकानूनी है और सॉफ्टवेयर को तोड़ता है जो सही ढंग से आरएफसी के अनुसार काम करता है। यह अभी तक इसका उपयोग न करने के लिए एक संयोजक होना चाहिए, फिर भी हमेशा ऐसे लोग हैं जो बीओएम, टिप्पणियां, विभिन्न उद्धरण नियमों या विभिन्न डेटा प्रकारों का उपयोग करके JSON को तोड़ने पर जोर देते हैं। बेशक, अगर आप को इसकी ज़रूरत होती है तो किसी को भी बीओएम जैसी चीज़ों का उपयोग करने के लिए स्वतंत्र है या नहीं – बस इसे JSON को कॉल न करें

JSON की तुलना में अन्य डेटा प्रारूपों के लिए, यह वास्तव में कैसा दिखता है अगर केवल एन्कोडिंग यूटीएफ- * हैं और पहला अक्षर 128 से कम एएससीआईआई वर्ण होना चाहिए, तो आपके पास पहले से ही सभी एन्कोडिंग और आपके डेटा की समाप्ति को निर्धारित करने के लिए सभी आवश्यक जानकारी होनी चाहिए। एक वैकल्पिक सुविधा के रूप में BOMs को जोड़ना केवल इसे और अधिक जटिल और त्रुटि प्रवण बनाना होगा।

बीओएम के अन्य उपयोग

JSON या स्क्रिप्ट के बाहर का उपयोग करने के लिए, मुझे लगता है कि यहां पहले से ही बहुत अच्छे उत्तर हैं। मैं अधिक विस्तृत जानकारी विशेष रूप से स्क्रिप्टिंग और सीरियलाइजेशन के बारे में जोड़ना चाहता हूं क्योंकि यह BOM वर्णों की एक वास्तविक उदाहरण है जिससे वास्तविक समस्याएं पैदा होती हैं।

बीओएम के साथ यूटीएफ -8 बेहतर पहचानता है। मैं इस निष्कर्ष तक पहुंचा दिया है कठिन रास्ता मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां परिणाम में से एक सीएसवी फ़ाइल है, जिसमें यूनिकोड वर्ण शामिल हैं।

यदि सीओवी फ़ाइल को किसी बम के बिना सहेजा जाता है, तो एक्सेल यह सोचता है कि यह एएनएसआई है और गहरी दिखाती है एक बार जब आप सामने "ईएफ बीबी बीएफ" जोड़ते हैं (उदाहरण के लिए, इसे UTF-8 के साथ नोटपैड का उपयोग करके पुनः प्रयोग करके; या नोटपैड ++ को BOM के साथ UTF-8 के साथ), एक्सेल उसे ठीक से खोलता है

यूनिकोड टेक्स्ट फाइलों के लिए बीओएम वर्ण तैयार करना आरएफसी 3629 द्वारा अनुशंसित है: "यूटीएफ -8, आईएसओ 10646 का रूपांतरण प्रारूप", नवंबर 2003 को http://tools.ietf.org/html/rfc3629 पर (इस अंतिम जानकारी को पाया गया: http://www.herongyang.com/Unicode/Notepad-Byte-Order-Mark-BOM-FEFF-EFBBBF.html )

बीओएम तेजी से बढ़ता है (कोई यमक इरादा नहीं है) और जब यह उछाल आता है (उदाहरण के लिए, ब्राउज़र, एडिटर्स आदि) द्वारा मान्यता प्राप्त नहीं है, तो यह दस्तावेज की शुरुआत में अजीब अक्षर  रूप में दिखाया जाता है (उदाहरण के लिए, HTML फ़ाइल, JSON प्रतिक्रिया, आरएसएस , आदि) और ट्विटर पर ओबामा की बात करते हुए हाल ही में एन्कोडिंग मुद्दे की तरह शर्मिंदगी की तरह का कारण बनता है।

यह बहुत कष्टप्रद है जब यह डिबग करने के लिए कठिन स्थानों पर दिखाया जाता है या जब परीक्षण की उपेक्षा की जाती है। इसलिए जब तक आप इसे उपयोग नहीं करना चाहिए तब तक इसे से बचने के लिए सबसे अच्छा है

प्रश्न: क्या बीओएम बिना यूटीएफ -8 और यूटीएफ -8 के बीच अलग है? कौनसा अच्छा है?

यहां बाइट ऑर्डर मार्क (बीओएम) पर विकिपीडिया लेख के कुछ अंश दिए गए हैं जो मेरा मानना ​​है कि इस प्रश्न का एक ठोस उत्तर प्रदान करते हैं।

बीओएम और यूटीएफ -8 के अर्थ पर:

यूनिकोड मानक यूटीएफ -8 में बीओएम की अनुमति देता है, लेकिन इसकी उपयोग की आवश्यकता नहीं है या इसकी सिफारिश नहीं करता है। यूटीएफ -8 में बाइट ऑर्डर का कोई अर्थ नहीं है, इसलिए यूटीएफ -8 में इसका इस्तेमाल केवल यूटिफ़ -8 में पाठ स्ट्रीम को एन्कोड किया गया है।

एक BOM का उपयोग नहीं करने के लिए तर्क :

एक बीओएम का उपयोग न करने के लिए प्राथमिक प्रेरणा, पीछे की तरफ-सॉफ़्टवेयर के साथ संगतता है जो कि यूनिकोड-अवगत नहीं है … एक बीओएम का उपयोग न करने के लिए एक और प्रेरणा है जो यूटीएफ -8 को "डिफ़ॉल्ट" एन्कोडिंग के रूप में प्रोत्साहित करती है।

एक BOM का उपयोग करने के लिए तर्क :

एक BOM का उपयोग करने के लिए तर्क यह है कि इसके बिना, अनुमानी विश्लेषण को यह निर्धारित करने के लिए आवश्यक है कि कोई फ़ाइल किस एन्कोडिंग का उपयोग कर रहा है ऐतिहासिक रूप से इस तरह का विश्लेषण, विभिन्न 8-बिट एनकोडिंग में अंतर करने के लिए, जटिल, त्रुटि-प्रवण और कभी-कभी धीमा होता है। कार्य को कम करने के लिए कई लाइब्रेरी उपलब्ध हैं, जैसे मोज़िला यूनिवर्सल वर्णसेट डिटेक्टर और यूनिकोड के लिए अंतर्राष्ट्रीय घटक।

प्रोग्रामर्स गलती से मानते हैं कि यूटीएफ -8 का पता लगाने के लिए उतना ही मुश्किल है (यह बाइट अनुक्रमों के विशाल बहुमत के कारण अमान्य यूटीएफ -8 नहीं है, जबकि इन पुस्तकालयों को सभी संभव बाइट अनुक्रमों की अनुमति देने के लिए एनकोडिंग की कोशिश कर रहे हैं)। इसलिए सभी यूनिकोड-जागरूकता कार्यक्रम ऐसे विश्लेषण नहीं करते हैं और इसके बजाय BOM पर भरोसा करते हैं।

विशेष रूप से, माइक्रोसॉफ्ट कंपाइलर्स और दुभाषियों, और माइक्रोसॉफ्ट विंडोज जैसे सॉफ्टवेयर के कई टुकड़े जैसे नोटपैड यूटीएफ -8 पाठ को ठीक से नहीं पढ़ेंगे, जब तक कि इसमें केवल एएससीआईआई वर्ण न हों या यह बीओएम के साथ शुरू हो, और बचत के समय शुरू में एक बीओएम जोड़ देगा यूटीएफ -8 के रूप में पाठ Google डॉक्स एक BOM जोड़ देगा जब एक माइक्रोसॉफ्ट वर्ड डॉक्युमेंट सादा टेक्स्ट फाइल के रूप में डाउनलोड होगा।

जिस पर बेहतर है, के साथ या बिना BOM:

आईईटीएफ सिफारिश करता है कि यदि कोई प्रोटोकॉल (ए) हमेशा यूटीएफ -8 का उपयोग करता है, या (बी) में यह संकेत देने का कोई दूसरा तरीका है कि एन्कोडिंग किस प्रकार उपयोग की जा रही है, तो "यह यू + एफईएफएफ को हस्ताक्षर के रूप में इस्तेमाल करने से रोकना चाहिए।"

मेरा निष्कर्ष:

केवल BOM का उपयोग करें, अगर माइक्रोसॉफ्ट सॉफ्टवेयर या अन्य सॉफ्टवेयर के साथ संगतता बिल्कुल जरूरी है।

बीओएम पर विकिपीडिया पेज के नीचे उद्धृत: http://en.wikipedia.org/wiki/Byte-order_mark#cite_note-2

"बीओएम का उपयोग न तो आवश्यक है और न ही यूटीएफ -8 के लिए अनुशंसित है, लेकिन उन संदर्भों में इसका सामना किया जा सकता है जहां यूटीएफ -8 डेटा अन्य एन्कोडिंग रूपों से परिवर्तित होता है जो बीओएम का उपयोग करते हैं या जहां यूओएफ -8 हस्ताक्षर के रूप में उपयोग किया जाता है"

मैं एक अलग दृष्टिकोण से इसे देखो मुझे लगता है कि बीओएम के साथ यूटीएफ -8 बेहतर है क्योंकि यह फ़ाइल के बारे में अधिक जानकारी प्रदान करता है। मैं BOM के बिना यूटीएफ -8 का उपयोग केवल तभी कर सकता हूँ जब मुझे समस्याएं आती हैं

मैं अपने पृष्ठों पर कई भाषाओं (यहां तक ​​कि सीरिलिक ) का उपयोग कर रहा हूं और जब फाइलें BOM के बिना सहेजी जाती हैं और मैं एक संपादक के साथ संपादन के लिए उन्हें फिर से खोलता हूं (जैसा कि चेरुविम ने भी नोट किया है), कुछ अक्षर भ्रष्ट हैं

ध्यान दें कि Windows 'क्लासिक नोटपैड स्वचालित रूप से एक BOM के साथ फ़ाइलें सहेजता है जब आप यूटीएफ -8 एन्कोडिंग के साथ एक नई बनाई गई फ़ाइल को सहेजने का प्रयास करते हैं।

मैं व्यक्तिगत रूप से सर्वर साइड स्क्रिप्टिंग फाइलें (.asp, .ini, .aspx) को BOM के बिना BOM और .html फ़ाइलों से सहेजता हूं I

बीओएम के बिना यूटीएफ -8 बीओएम के पास नहीं है, जो इसे यूओटीएफ -8 से बेहतर नहीं बनाता है, बशर्ते फाइल के उपभोक्ता को जानने की जरूरत है (या जानने से फायदा होगा) कि फाइल यूटीएफ -8-एन्कोडेड है या नहीं या नहीं।

आम तौर पर एन्कोडिंग की अंत्यता को निर्धारित करने के लिए BOM आमतौर पर उपयोगी होता है, जो अधिकांश उपयोग मामलों के लिए आवश्यक नहीं है।

इसके अलावा, BOM उन उपभोक्ताओं के लिए अनावश्यक शोर / दर्द हो सकता है जो इसके बारे में नहीं जानते या उनकी परवाह नहीं करते हैं, और इससे उपयोगकर्ता भ्रम पैदा हो सकता है।

जब आप यूटीएफ -8 में एन्कोडेड सूचना प्रदर्शित करना चाहते हैं, तो आपको समस्याओं का सामना नहीं करना पड़ सकता है उदाहरण के लिए एक HTML दस्तावेज को यूटीएफ -8 के रूप में घोषित करें और आपको अपने ब्राउज़र में जो कुछ भी दिखाई देगा, वह दस्तावेज़ के शरीर में मौजूद होगा।

लेकिन जब हमारे पास पाठ, सीएसवी और एक्सएमएल फाइल है, तो ऐसा नहीं है, जो विंडोज या लिनक्स पर है।

उदाहरण के लिए, विंडोज या लिनक्स में एक पाठ फ़ाइल, सबसे आसान चीजों में से एक चीज है, यह (आमतौर पर) यूटीएफ -8 नहीं है

इसे XML के रूप में सहेजें और इसे यूटीएफ -8 के रूप में घोषित करें:

 <?xml version="1.0" encoding="UTF-8"?> 

यह प्रदर्शित नहीं होगा (यह पढ़ा नहीं जाएगा) सही है, भले ही इसे यूटीएफ -8 के रूप में घोषित किया गया हो।

मेरे पास फ्रांसीसी अक्षर वाले डेटा की एक स्ट्रिंग थी, जिसे सिंडिकेशन के लिए एक्सएमएल के रूप में सहेजने की आवश्यकता थी। बहुत शुरुआत से यूटीएफ -8 फ़ाइल बनाने के बिना (आईडीई में बदलते विकल्प और "नई फाइल बनाएं") या फ़ाइल की शुरुआत में BOM को जोड़ना

 $file="\xEF\xBB\xBF".$string; 

मैं एक XML फ़ाइल में फ्रांसीसी अक्षरों को सहेजने में सक्षम नहीं था।

यूओटीएफ -8 बीओएम से केवल मदद करता है अगर फ़ाइल में वास्तव में कुछ गैर-एएससीआईआई वर्ण शामिल हैं। यदि यह शामिल है और कोई भी नहीं है, तो यह संभवतः पुराने अनुप्रयोगों को तोड़ देगा जो कि फ़ाइल को सादे एएससीआईआई के रूप में परिभाषित करेगा। ये अनुप्रयोग निश्चित रूप से असफल हो जायेंगे जब वे एक गैर एएससीआईआई वर्ण में आते हैं, तो मेरी राय में फ़ाइल को तब ही जोड़ना चाहिए जब फ़ाइल हो, और अब इसे सादे ASCII के रूप में व्याख्या नहीं किया जा सकता है

संपादित करें: बस यह स्पष्ट करना चाहते हैं कि मैं BOM को बिल्कुल भी नहीं पसंद करता हूं, इसमें कुछ पुरानी कचरे को तोड़ता है और उस विरासत को बदलने की प्रक्रिया संभव नहीं है।

कुछ भी यूटीएफ 8 के लिए बीओएम की उम्मीद न करें।

यह ध्यान दिया जाना चाहिए कि कुछ फ़ाइलों के लिए आपको विंडोज पर भी BOM नहीं होना चाहिए । उदाहरण SQL*plus या VBScript फाइल्स हैं। यदि ऐसी फ़ाइलों में एक BOM होता है तो आप उन्हें निष्पादित करने का प्रयास करते समय त्रुटि प्राप्त करते हैं।

इस सवाल का पहले से ही एक लाख और एक जवाब है और उनमें से बहुत अच्छे हैं, लेकिन मैं कोशिश करना और स्पष्ट करना चाहता हूं जब एक बीओएम को इस्तेमाल किया जाना चाहिए या नहीं।

जैसा कि उल्लेख किया गया है, यूटीएफ बीओएम (बाइट ऑर्डर मार्क) का कोई भी उपयोग यह निर्धारित करने में है कि क्या स्ट्रिंग UTF-8 है या नहीं, शिक्षित ग़लत काम है अगर उचित मेटाडाटा उपलब्ध है (जैसे charset="utf-8" ), तो आप पहले से ही जानते हैं कि आप क्या उपयोग कर रहे हैं, लेकिन अन्यथा आपको कुछ मान्यताओं का परीक्षण करने और बनाने की आवश्यकता होगी यह जांचना शामिल है कि क्या फ़ाइल स्ट्रिंग आती है, हेक्साडेसिमल बाइट कोड, ईएफ बीबी बीएफ के साथ शुरू होती है।

यदि यूटीएफ -8 बीओएम से संबंधित एक बाइट कोड पाया जाता है, तो यह संभावना है कि यूटीएफ -8 का अनुमान लगाया जा सके और आप वहां से जा सकते हैं। जब यह अनुमान लगाने के लिए मजबूर हो जाता है, फिर भी, पढ़ने के दौरान अतिरिक्त त्रुटि की जांच अभी भी एक अच्छा विचार हो सकती है जब कुछ गड़बड़ हो जाती है आपको केवल मान लेना चाहिए कि बीओएम यूटीएफ -8 (यानी लैटिन -1 या एएनएसआई) नहीं है यदि इनपुट निश्चित रूप से यूटीएफ -8 के स्रोत पर आधारित नहीं होना चाहिए । अगर कोई बीओएम नहीं है, तो आप केवल यह निर्धारित कर सकते हैं कि यह एन्कोडिंग के विरुद्ध मान्य द्वारा यूटीएफ -8 माना जाता है या नहीं।

क्यों एक BOM अनुशंसित नहीं है?

  1. गैर-यूनिकोड-अवगत या खराब अनुपालन सॉफ़्टवेयर यह लैटिन -1 या एएनएसआई मान सकते हैं और स्ट्रिंग से बीओएम को पट्टी नहीं करेंगे, जो स्पष्ट रूप से मुद्दों का कारण बन सकता है।
  2. यह वास्तव में जरूरी नहीं है (केवल जांच करें कि सामग्री अनुपालन की जाती है और हमेशा UTF-8 को फ़ॉलबैक के रूप में उपयोग करते हैं जब कोई संगत एन्कोडिंग नहीं मिल सकता है)

आपको कब बोम के साथ सांकेतिक शब्दों में बदलना चाहिए ?

यदि आप मेटाडाटा को किसी भी अन्य तरीके से रिकॉर्ड करने में असमर्थ हैं (वर्णसेट टैग या फ़ाइल सिस्टम मेटा के माध्यम से), और प्रोग्राम BOMs जैसे उपयोग किए जा रहे हैं, तो आपको एक BOM के साथ सांकेतिक शब्दों में बदलना चाहिए। यह विशेष रूप से विंडोज पर सच है, जहां एक बीओएम के बिना कुछ भी सामान्यतः एक विरासत कोड पृष्ठ का उपयोग करने के लिए माना जाता है बीओएम कार्यालय जैसे कार्यक्रम बताता है, हां, इस फाइल में टेक्स्ट यूनिकोड है; यहाँ इस्तेमाल एन्कोडिंग है

जब इसे नीचे आता है, केवल फाइलें हैं जिनके साथ मुझे वास्तव में समस्याएं हैं CSV कार्यक्रम के आधार पर, यह या तो आवश्यक है, या एक BOM नहीं होना चाहिए। उदाहरण के लिए, अगर आप विंडोज़ 2007 में एक्सेल 2007+ का प्रयोग कर रहे हैं, तो आपको इसे आसानी से खोलना चाहते हैं और डेटा आयात करने का सहारा नहीं लेना चाहिए, इसे एक बीओएम से एन्कोड करना होगा।

एक व्यावहारिक अंतर यह है कि यदि आप Mac OS X के लिए एक खोल स्क्रिप्ट लिखते हैं और इसे सादे UTF-8 के रूप में सहेजते हैं, तो आपको जवाब मिलेगा:

 #!/bin/bash: No such file or directory 

Shebang लाइन के जवाब में निर्दिष्ट है कि आप किस शेल का उपयोग करना चाहते हैं:

 #!/bin/bash 

यदि आप यूटीएफ -8 के रूप में सहेजते हैं, तो कोई बीओएम ( बीबीएडिट में नहीं ) सभी अच्छी तरह से होंगे

http://en.wikipedia.org/wiki/Byte-order_mark से :

बाइट ऑर्डर मार्क (बीओएम) एक यूनिकोड वर्ण है जो एक पाठ फ़ाइल या धारा के एंडियननेस (बाइट ऑर्डर) को सिग्नल करता है। इसका कोड बिंदु यू + एफईएफएफ है। BOM उपयोग वैकल्पिक है, और, यदि उपयोग किया जाता है, तो पाठ स्ट्रीम की शुरुआत में दिखाई देना चाहिए। बाइट-ऑर्डर सूचक के रूप में अपने विशिष्ट उपयोग से परे, बीओएम वर्ण भी इंगित कर सकता है कि पाठ में एन्कोडेड कई यूनिकोड अभिसरणों में से कौन सा है।

हमेशा आपकी फ़ाइल में एक BOM का प्रयोग करके यह सुनिश्चित होगा कि यह हमेशा एक संपादक में सही ढंग से खुलता है जो UTF-8 और BOM का समर्थन करता है।

बीओएम की अनुपस्थिति के साथ मेरी वास्तविक समस्या निम्न है मान लीजिए हमारे पास एक फाइल है जिसमें शामिल है:

 abc 

बीओएम के बिना यह अधिकांश एडिटर्स में एएनएसआई के रूप में खुलता है। इसलिए इस फाइल का दूसरा प्रयोक्ता खुलता है और कुछ देशी अक्षर जोड़ता है, उदाहरण के लिए:

 abg-αβγ 

ओह … अब फाइल एएनएसआई में है और लगता है कि, "αβγ" 6 बाइट्स पर कब्जा नहीं करता है, लेकिन 3. यह यूटीएफ -8 नहीं है और यह बाद में विकास श्रृंखला में अन्य समस्याओं का कारण बनता है।

जैसा कि ऊपर उल्लिखित है, बीओएम के साथ यूटीएफ -8 गैर-बीओएम-जागरूक (या संगत) सॉफ्टवेयर के साथ समस्या पैदा कर सकता है। मैंने एक बार एचटीएमएल फ़ाइलों को संपादित किया है जो मोज़िला-आधारित कॉम्पोज़र के साथ यूटीएफ -8 + बीओएम के रूप में एन्कोडेड है, क्योंकि एक ग्राहक को WYSIWYG प्रोग्राम की आवश्यकता है।

सहेजे जाने पर आम तौर पर लेआउट नष्ट हो जाता। यह मेरे चारों ओर अपना रास्ता बेला करने के लिए कुछ समय लगा। इन फ़ाइलों ने फिर फ़ायरफ़ॉक्स में अच्छी तरह से काम किया, लेकिन इंटरनेट एक्स्प्लोरर में एक सीएसएस विंटर को लेआउट नष्ट कर दिया, फिर से दिखाया। घंटे के लिए लिंक किए गए सीएसएस फ़ाइलों के साथ नगण्य के बाद कोई फायदा नहीं हुआ मुझे पता चला कि इंटरनेट एक्सप्लोरर को बॉम्फ़ेड एचटीएमएल फ़ाइल पसंद नहीं आया। फिर कभी नहीं।

इसके अलावा, मैं इसे केवल विकिपीडिया में पाया है:

शेबांग पात्रों को यूटीएफ -8 सहित विस्तारित एएससीआईआई एन्कोडिंग में एक ही दो बाइट्स के द्वारा प्रतिनिधित्व किया जाता है, जो आमतौर पर वर्तमान यूनिक्स जैसी प्रणालियों पर स्क्रिप्ट और अन्य टेक्स्ट फाइलों के लिए उपयोग किया जाता है। हालांकि, यूटीएफ -8 फाइल वैकल्पिक बाइट ऑर्डर मार्क (बीओएम) से शुरू हो सकती है; यदि "exec" फ़ंक्शन विशेष रूप से बाइट्स 0x23 0x21 का पता लगाता है, तो शेबांग से पहले BOM (0xEF 0xBB 0xBF) की उपस्थिति स्क्रिप्ट interpreter को निष्पादित होने से रोकी जाएगी। कुछ अधिकारियों ने पॉसिक्स (यूनिक्स-जैसी) स्क्रिप्ट में बाइट ऑर्डर मार्क का उपयोग करने की सलाह दी है, [15] इस कारण के लिए और व्यापक अंतर और दार्शनिक चिंताओं के लिए

UTF with BOM is better if you use UTF-8 in HTML files, if you use Serbian Cyrillic, Serbian Latin, German, Hungarian or something exotic language in the same page. That is my opinion (30 years of computing and IT industry).