क्या UTF-8 CSV फ़ाइलों में BOM (बाइट ऑर्डर मार्क) होना चाहिए?


37

हमारा लाइन-ऑफ-बिजनेस सॉफ्टवेयर उपयोगकर्ता को कुछ डेटा को सीएसवी के रूप में सहेजने की अनुमति देता है । चूंकि जंगली में बहुत सारे अलग-अलग प्रारूप ("सीएसवी" कहलाते हैं), हम तय करने के लिए बांध रहे हैं कि "डिफ़ॉल्ट प्रारूप" कैसा दिखना चाहिए।

  • लाइन / फील्ड विभाजक और भागने के संबंध में, एक मानक है जिसका हम उपयोग कर सकते हैं: RFC 4180

  • पाठ एन्कोडिंग के बारे में, यूटीएफ -8 पिछले दशक में "डिफ़ॉल्ट पाठ फ़ाइल प्रारूप" के रूप में उभरा है, इसलिए हम इसका उपयोग करेंगे।

एक सवाल खुला छोड़ दिया है: हम शुरू में एक बीओएम जोड़ना चाहिए या नहीं? मैंने सामान्य रूप से BOMs के उपयोग पर कई राय और पेशेवरों / विपक्षों को पढ़ा है, लेकिन CSV फ़ाइलों में BOMs के उपयोग पर "आधिकारिक" सिफारिश या कम से कम किसी तरह की सामुदायिक सहमति है?


7
अगर इसमें BOM है तो यह UTF-8 नहीं है। लेकिन कार्यक्रम क्या प्रारूप चाहते हैं। अगर उन्हें BOM (मुख्य रूप से माइक्रो-स्लॉथ) की आवश्यकता है तो आपको एक जोड़ने की आवश्यकता है, लेकिन UTF-8 + BOM। UTF-8।
सीटीएल-एल्ट-डेलोर

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

2
यदि आप CSV मार्ग लेते हैं, तो चेक करें कि मैक और पीसी दोनों पर फ़ाइल खोलने पर क्या होता है, आदर्श रूप से एक्सेल के कई संस्करणों के साथ। यह भी ध्यान रखें कि जब आप इसे खोलने या मेनू के माध्यम से फ़ाइल को खोलने के लिए फ़ाइल पर डबल-क्लिक करते हैं तो एक्सेल के कुछ संस्करण समान व्यवहार नहीं करते हैं।
जकारोन

2
एक्सेल में सही तरीके से खुलने पर यह क्यों होता है? प्रश्न में कुछ भी नहीं है कि एक्सेल को उत्पन्न फ़ाइल को पार्स करने में सक्षम होने की आवश्यकता है ...
rubenvb

जवाबों:


55

UTF-8 के लिए नहीं , लेकिन टिप्पणियों में विभिन्न चेतावनी देखें।

यह अनावश्यक है (UTF-8 में कोई बाइट ऑर्डर नहीं है) UTF-16/32 के विपरीत और यूनिकोड मानक में अनुशंसित नहीं है । यह बहुत दुर्लभ है, "जंगली में" BOM के साथ UTF-8 को देखने के लिए, इसलिए जब तक आपके पास कोई वैध कारण नहीं है (जैसे कि टिप्पणी की गई है, तो आप उस सॉफ़्टवेयर के साथ काम करेंगे जो BOM से अपेक्षा करता है) मैं BOM- कम दृष्टिकोण की सिफारिश करूंगा ।

विकिपीडिया में कुछ मुख्य रूप से Microsoft सॉफ़्टवेयर का उल्लेख है जो एक BOM के लिए बाध्य और अपेक्षा करता है, लेकिन जब तक आप उनके साथ काम नहीं कर रहे हैं, इसका उपयोग न करें।


28
BOM की आवश्यकता वाले व्यापक सॉफ़्टवेयर भी हैं: Excel को एक BOM की आवश्यकता है ताकि CSV फ़ाइल को UTF-8 के रूप में सही ढंग से "ANSI" अर्थात स्थानीय संगतता लोकेल के रूप में पहचाना जा सके। (लेकिन ऐसी फ़ाइल को सहेजते समय एक्सेल भी अजीब चीजें करता है , इसलिए हम उपयोगकर्ताओं को सलाह देते हैं कि यदि वे एक्सेल के साथ फाइल खोलना चाहते हैं तो CSV निर्यात के बजाय हमारे "वास्तविक" एक्सेल निर्यात का उपयोग करें।)
हेंजज़ी

21
@ हिनजी मैंने बहुत पहले सीखा कि आप सीएसवी और एक्सेल के साथ काम करते हुए वास्तव में नहीं जीत सकते। यह बस एक घटिया सीएसवी-रीडर है। बहुत बुरा यह सामान्य उपयोगकर्ताओं को उम्मीद है।
पाइप

9
@Voo: UTF-8 के लिए BOM की आवश्यकता निश्चित रूप से मानक का उल्लंघन करती है, यह देखते हुए कि यह " न तो आवश्यक है और न ही अनुशंसित है "।
डेडुप्लिकेटर

12
@ डेड्यूप्लिकेटर: MS-DOS और Windows सिस्टम में UTF-8 के अलावा अन्य एन्कोडिंग में विरासत पाठ फ़ाइलों का एक बड़ा आधार है। गुणवत्ता अनुप्रयोग उपयोगकर्ता को यह निर्दिष्ट करने की अनुमति देते हैं कि किसी टेक्स्ट फ़ाइल को खोलते समय कैसे एन्कोड किया जाता है, लेकिन अक्सर "ऑटो" विकल्प शामिल होता है। यदि कोई उपयोगकर्ता "UTF-8" का चयन करता है, तो UTF-8 फ़ाइल BOM के साथ या उसके बिना सही ढंग से खोली जाएगी। यदि कोई उपयोगकर्ता "ऑटो" का चयन करता है, तो कुछ यूटीएफ -8 फाइलें जिनके पास बीओएम नहीं है, उन्हें कुछ अन्य एन्कोडिंग का उपयोग करने के रूप में गलत समझा जा सकता है। मुझे यकीन नहीं है कि कोई व्यक्ति किसी एप्लिकेशन को अलग तरीके से करने की उम्मीद करेगा, क्योंकि "गलत" वाली फाइलें बिट-फॉर-बिट के समान हो सकती हैं ...
सुपरकैट

7
@Voo: यह कई अन्य प्रारूप-विशिष्ट आवश्यकताओं के साथ टकराता है जहां BOM गैरकानूनी है। उदाहरण के लिए, #!अमान्य होने से पहले BOM के साथ एक शेल स्क्रिप्ट । UTF-8 में एक बीओएम को "अनुमति दी जाती है, जब कोई प्रारूप- / अनुप्रयोग-विशिष्ट आवश्यकता इसे छोड़ देती है", "अनुमति नहीं", और जैसे कि इसका उपयोग नहीं किया जाना चाहिए। मानकों वास्तव में स्पष्ट नहीं के बारे में स्पष्ट हैं।
आर ..

8

अभी भी कोई व्यापक सम्मेलन AFAIK नहीं है, हालांकि निश्चित रूप से UTF-8 अब आम तौर पर स्वीकार किया जाता है।

BOM एक भयानक कलाकृति है:

यह अदृश्य (शून्य-चौड़ाई वाला स्थान) है।

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

पहले मान को दूषित करने वाली मान रेखाओं के लिए शीर्ष लेख पंक्ति को प्रतिरूपित किया जा सकता है।

यह केवल कुछ विंडोज सॉफ्टवेयर द्वारा उस स्थानीय विंडोज मशीन और यूटीएफ -8 द्वारा उपयोग किए गए एएनएसआई एन्कोडिंग में से एक के बीच अंतर करने के लिए आवश्यक है। नोटपैड, एक्सेल।

तो दुख की बात यह है कि BOM का समर्थन करना चाहिए। शायद वैकल्पिक।

फ़ाइलों के लिए एक नामकरण योजना का उपयोग करें (... utf8.txt, ...- utf8bom.txt)।


कई मामलों में हम निर्यात विकल्प के रूप में HTML का उपयोग कर सकते हैं । यह फ़ाइल में एन्कोडिंग सेट करने की अनुमति देता है। एक अतिरिक्त विशेषता पंक्तियों और कोशिकाओं की पृष्ठभूमि / अग्रभूमि रंग है। जो निर्यात की गुणवत्ता को बढ़ाता है।


15
क्या प्रारूपण "निर्यात की गुणवत्ता को बढ़ाता है" फ़ाइल के इच्छित उपयोग पर निर्भर है। CSV को अक्सर एक साधारण मशीन पठनीय प्रारूप के रूप में उपयोग किया जाता है , और प्राप्तकर्ता पार्स HTML बनाने के बजाय उस मामले में एक बड़ा नुकसान होगा ।
IMSoP

5
यदि आप नामकरण योजना चुन रहे हैं, तो दर्शकों को ध्यान में रखें। -utf8-windows.csvबेहतर है। कंप्यूटर के संदर्भ में, विंडोज क्या है, यह लगभग सभी जानते हैं, लेकिन अभी तक बहुत कम उपयोगकर्ता जानते हैं कि बाइट ऑर्डर मार्क क्या है।
एमएसलटर्स

2
@Davislor हाँ अगर यह एक व्यापक रूप से ज्ञात मानक है। अन्यथा त्रुटि रिपोर्ट tschüßकचरा होने के बारे में आएगी जबकि tschüßलिखा जाना चाहिए था। StackOverflow पर कई IT त्रुटियाँ एन्कोडिंग के बारे में हैं। अंत उपयोगकर्ताओं को भी समस्याओं का अनुभव होगा।
जोप एगेनजेन

3
@JoopEggen "व्यापक रूप से ज्ञात मानक" किस समुदाय में वास्तव में है? मैं अब लगभग 10 वर्षों से सॉफ्टवेयर विकास कर रहा हूं और मैंने कभी नहीं देखा है कि - विंडोज़ पर भी नहीं, और निश्चित रूप से लिनक्स या ओएसएक्स पर नहीं जहां आप लगभग हमेशा utf-8 से निपटते हैं।
घन

1
@JustinTime कुछ वर्षों से हाँ, लेकिन इससे पहले नहीं। MS डेवलपर बुरे नहीं हैं (Posix अनुपालन, अब UTF-8 समर्थन)।
जोप एगेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.