डेटा और स्प्रेडशीट · CSV क्लीनर
स्प्रेडशीट उपयोगकर्ताओं के लिए कैरेक्टर एन्कोडिंग: ASCII, Windows-1252 और UTF-8
· पेजभूमि
CAसवी एन्कोडिंग डेटा-प्रारूप
एन्कोडिंग एक समझौता है जिसके बारे में बाइट्स का मतलब है कि कौन से अक्षर हैं, और CSV फ़ाइलें कभी नहीं बताती हैं कि वे किसका उपयोग करते हैं। यह पोस्ट स्पष्ट शब्दों में ASCII, Windows-1252 और UTF-8 बताती है कि UTF-8 क्यों जीता, और निर्यात के लिए इसका क्या अर्थ है।
'यह एक एन्कोडिंग मुद्दा है' एक स्पष्टीकरण के रूप में जो कुछ भी नहीं बताता है - एन्कोडिंग वास्तव में क्या है
"एन्कोडिंग समस्या" कहने से एक सीमा की पहचान होती है लेकिन कोई उपाय नहीं। एक फ़ाइल बाइट्स संग्रहीत करती है; पेज को सीमांककों और उद्धरणों को पहचानने से पहले वर्णों की आवश्यकता होती है। यदि बाइट-टू-कैरेक्टर समझौता गलत है, तो पार्सर को प्रतिस्थापन चिह्न प्राप्त हो सकते हैं, भले ही इसकी CSV राज्य मशीन बिल्कुल वैसा ही व्यवहार कर रही हो जैसा लिखा गया है।
ToolAcre का समझौता स्पष्ट है: चयनित पाठ को UTF-8 के रूप में पढ़ा जाता है, और केवल अग्रणी UTF-8 बाइट-ऑर्डर चिह्न को विशेष हैंडलिंग प्राप्त होती है। यह संकीर्ण अनुबंध यह दिखावा करने से अधिक उपयोगी है कि CSV में एन्कोडिंग लेबल होता है। संरचनात्मक सफ़ाई पर भरोसा करने से पहले निर्यातक और प्राप्तकर्ता को सहमत होना होगा।
ASCII: साझा कोर - सात बिट्स, अंग्रेजी वर्णमाला और विराम चिह्न, और यह लगभग हर एन्कोडिंग के लिए सामान्य क्यों है
अधिकांश CSV सिंटैक्स द्वारा उपयोग किए जाने वाले परिचित अंग्रेजी अक्षरों, अंकों और विराम चिह्नों के लिए ASCII वर्ण UTF-8 के साथ ओवरलैप होते हैं। यही कारण है कि कोई फ़ाइल तब तक ठीक दिखाई दे सकती है जब तक कि ग्राहक का नाम या प्रतीक साझा सीमा के बाहर बाइट्स पेश न कर दे। भंडार इस व्यावहारिक अवलोकन का समर्थन करता है लेकिन ASCII इतिहास या सटीक डिज़ाइन कालक्रम के लिए प्राथमिक स्रोत नहीं है।
इसलिए एक अल्पविराम और उद्धरण सही ढंग से पार्स किया जा सकता है जबकि एक नाम पहले से ही क्षतिग्रस्त है। संरचनात्मक सफलता चरित्र निष्ठा नहीं है। किसी निर्यात का परीक्षण करते समय गैर-ASCII फिक्स्चर शामिल करें, क्योंकि एक पूर्ण-अंग्रेजी नमूना एन्कोडिंग सीमा का उपयोग नहीं कर सकता है जो अंतरराष्ट्रीय डेटा के लिए मायने रखता है।
ASCII ओवरलैप उपयोगी संदर्भ है, जबकि बिट गणना और इतिहास के लिए बाहरी स्रोतों की आवश्यकता होती है
लीगेसी कोड पेज क्षेत्रीय तालिकाओं के अंतर्गत बाइट मान निर्दिष्ट करते हैं, और गलत तालिका का उपयोग करने से वर्ण बदल जाते हैं। कार्यपुस्तिका ने Windows-1252 विवरण का अनुरोध किया, फिर भी ToolAcre में कोई चयन योग्य डिकोडर या मैपिंग तालिका नहीं है। इसका कॉन्फ़िगरेशन चेतावनी देता है कि Windows-1252 और Shift-JIS को UTF-8 के रूप में पढ़ा जाता है और प्रतिस्थापन वर्ण दिखाए जाते हैं।
निर्माता सेटिंग्स या एन्कोडिंग-जागरूक इंस्पेक्टर के माध्यम से एक विरासत स्रोत की पहचान करें जो अछूते बाइट्स से काम करता है। इस क्लीनर से नामों से तालिका का अनुमान लगाने के लिए न कहें। एक बार `File.text()` एक क्षतिग्रस्त स्ट्रिंग लौटाता है, तो पार्सर डिकोडिंग द्वारा छोड़े गए बाइट भेदों को पुनर्प्राप्त नहीं कर सकता है।
लीगेसी कोड-पेज विवरण बाहरी रिपॉजिटरी साक्ष्य हैं; ToolAcre उन्हें डिकोड नहीं करता
UTF-8 उन सामान्य वाक्यविन्यास वर्णों को अपरिवर्तित छोड़ते हुए ASCII ओवरलैप से परे पाठ का प्रतिनिधित्व कर सकता है। वर्कर पार्सिंग से पहले ब्राउज़र चयनित बाइट्स को JavaScript स्ट्रिंग में परिवर्तित करता है। उस स्ट्रिंग के भीतर, यूनिकोड नाम और इमोजी ToolAcre के पार्सर और सीरिएलाइज़र के माध्यम से राउंड-ट्रिप करते हैं, जैसा कि परीक्षणों से पता चलता है।
यह साक्ष्य मॉड्यूल को पूर्ण यूनिकोड व्याख्याता नहीं बनाता है। यह कहता है कि मार्ग वैध डिकोडेड स्ट्रिंग्स, उद्धृत फ़ील्ड और निर्यात पाठ को संरक्षित करता है। सामान्यीकरण फॉर्म, ग्रेफेम क्लस्टर या प्रत्येक यूनिकोड परिवर्तन के बारे में प्रश्न कोड के बाहर हैं और एक सफल राउंड ट्रिप से अनुमान नहीं लगाया जाना चाहिए।
ToolAcre UTF-8 टेक्स्ट हैंडलिंग को प्रदर्शित करता है, संपूर्ण यूनिकोड एन्कोडिंग मॉडल को नहीं
प्रोजेक्ट UTF-8 को चुनता है क्योंकि यह इसका कॉन्फ़िगर किया गया इनपुट और आउटपुट अनुबंध है। रिपॉजिटरी फ़ाइलें उन ऐतिहासिक कारणों को स्थापित नहीं करती हैं जिन्हें व्यापक वेब ने UTF-8 को अपनाया है, इसलिए यह लेख उस अनुरोधित दावे को छोड़ देता है। उत्पाद सत्य को क्रियान्वित करने के लिए एक सार्वभौमिक अपनाने की कथा की आवश्यकता नहीं है।
ऑपरेटरों के लिए, मानकीकरण का अर्थ है लोड करने से पहले निर्यात करना या UTF-8 में कन्वर्ट करना, प्रतिनिधि बहुभाषी मानों को सत्यापित करना, फिर एक समीक्षा तालिका को क्रमबद्ध करना। एक प्राप्त स्क्रिप्ट को UTF-8 की भी अपेक्षा करनी चाहिए और यह तय करना चाहिए कि वह BOM को स्वीकार करती है या नहीं। चूक के बारे में सामान्य बयान से अधिक दोनों पक्षों पर सहमति मायने रखती है।
रिपॉजिटरी UTF-8 को इस टूल के अनुबंध के रूप में स्थापित करती है, न कि व्यापक वेब ने इसे क्यों चुना
डिलीमीटर का पता लगाने से पहले एक अग्रणी U+FEFF को हटा दिया जाता है, और परिणाम `hadBom` को रिकॉर्ड करता है ताकि इंटरफ़ेस इसकी रिपोर्ट कर सके। जब विज़िटर विकल्प चुनता है तो निर्यात उसी चिह्न को पहले से जोड़ सकता है। उस विकल्प के बिना, आउटपुट सीधे पहले हेडर वर्ण से शुरू होता है।
यह चिह्न कुछ स्प्रेडशीट वर्कफ़्लो को UTF-8 को पहचानने में मदद कर सकता है, लेकिन कॉन्फ़िगरेशन चेतावनी देता है कि सख्त स्क्रिप्ट या डेटाबेस आयात इसे पहले हेडर से जोड़ सकते हैं। किसी ज्ञात उपभोक्ता के लिए विकल्प का उपयोग करें, सार्वभौमिक स्वच्छता के रूप में नहीं। BOM नीति इंटरफ़ेस अनुबंध का हिस्सा है।
इसमें क्या शामिल नहीं है - UTF-16 निर्यात, पूर्वी एशियाई एन्कोडिंग और रचित वर्णों का सामान्यीकरण
UTF-16, पूर्वी एशियाई विरासत एन्कोडिंग और यूनिकोड सामान्यीकरण यहां लागू नहीं किए गए हैं। न तो बाइट-ऑर्डर का पता लगाना और न ही रिप्लेसमेंट-कैरेक्टर की मरम्मत करना है। उन चूकों का नामकरण उपयोगकर्ता को एक सफल डाउनलोड को इस बात का प्रमाण मानने से रोकता है कि प्रत्येक मूल चरित्र जीवित है।
यदि असमर्थित बाइट्स शामिल हैं, तो मूल को सुरक्षित रखें और उस स्रोत के लिए डिज़ाइन किए गए डिकोडर का उपयोग करें। मान्य UTF-8 में रूपांतरण के बाद, ToolAcre अपनी प्रलेखित CSV संरचना को संभाल सकता है। कैरेक्टर डिकोडिंग को पंक्ति पार्सिंग से अलग करने से विफलताओं का निदान करना आसान हो जाता है और विनाशकारी अनुमान से बचा जा सकता है।
प्रत्येक निर्यात को UTF-8 बनाएं और ऐसा कहें - कैसे ToolAcre CSV क्लीनर की एन्कोडिंग मरम्मत आपके ब्राउज़र में विरासत निर्यात को UTF-8 में बदल देती है
UTF-8 को एक स्पष्ट विनिमय आवश्यकता बनाएं और डेटासेट द्वारा उपयोग किए जाने वाले वास्तविक वर्ण वर्गों के साथ इसका परीक्षण करें। ToolAcre अग्रणी UTF-8 BOM को हटा या जोड़ सकता है, वैध यूनिकोड सेल स्ट्रिंग रख सकता है और CSV उद्धरण को सामान्य कर सकता है। यह मूल रूपरेखा द्वारा वादा किया गया विरासत रूपांतरण नहीं कर सकता है।
जब प्रतिस्थापन वर्ण दिखाई दें, तो सफाई या पुनः सहेजने से पहले रुकें। मूल बाइट्स से पुनर्प्राप्त करें, नाम सत्यापित करें, फिर वापस लौटें। वह आदेश जानकारी की सुरक्षा करता है: डिलीमीटर, डुप्लिकेट और व्हाइटस्पेस संचालन से भरोसेमंद आउटपुट उत्पन्न करने से पहले एन्कोडिंग सही होनी चाहिए।