फाइलिंग एन्कोडिंग के बारे में एक आवश्यकता के बारे में


12

मैं एक आवश्यकताओं की कल्पना लिखने की प्रक्रिया में हूं, और मुझे आवश्यकताओं के एक टुकड़े को फिर से बनाने में दुविधा है।

परिदृश्य: हम एक वेबसाइट से फ़ाइलों को डाउनलोड करते हैं और डाउनलोड की गई फ़ाइलों को हमारे पास मौजूद सीएम टूल में एक आइटम से जुड़ा होना चाहिए। डाउनलोड की गई फ़ाइलों में नाम शामिल हैं जो ASCII, ISO-8859-1, जापानी, आदि हो सकते हैं।

नीचे दिए गए वाक्यांशों में, "गैर-एएससीआईआई" सभी स्थितियों को कवर करता है?

डाउनलोड की गई फ़ाइल का नाम गैर- ASCII वर्ण हो सकता है और इस के प्रसंस्करण से एप्लिकेशन क्रैश नहीं होगा


से एक वेबसाइट, या से कई वेबसाइटों? क्या उस वेबसाइट में वास्तव में एक gobbledegook फाइलसिस्टम है?
--_सफल

7
इसलिए यदि फ़ाइल नाम में एएससीआई है तो एप्लिकेशन को क्रैश करने की अनुमति है;)
jk।

11
क्या यह इंगित करना कठिन होगा कि "जापानी" एन्कोडिंग नहीं है?
Ixrec

@lxrec -> आप सही हैं। जापानी एक एन्कोडिंग नहीं है। मैं जो कहना चाहता था वह जापानी अक्षर था लेकिन पूरी तरह से टाइप नहीं था। धन्यवाद
KK99

@jk कुछ कार्यान्वयन में यदि फ़ाइल का नाम ASCII नहीं है तो अनुप्रयोग क्रैश हो जाता है। सच्ची कहानी :-)
KK99

जवाबों:


30

आवश्यकता, जैसा कि कहा गया है, मेरे लिए फ़र्ज़ी है।

पहला सवाल मेरे पास होगा: कितने चरित्र एन्कोडिंग का समर्थन करने की आवश्यकता है? संभावित व्याख्याओं में शामिल हैं:

  1. हर कभी, तैयार एन्कोडिंग एकल-बाइट (जैसे सहित आईएसओ-8859-15 ), multibyte (जैसे बिग 5 , Shift-JIS , हर्ट्ज ), और दुर्लभ / अजीब लोगों (जैसे UTF-7 , पनीकोड , EBCDIC )।
  2. यह स्पष्ट रूप से चरम है। ISO-8859-1 अर्थात् केवल न्यूनतम समर्थन के बारे में कैसे ?
  3. बस ISO-8859-1 वीसली लगता है। यूटीएफ -8 के रूप में यूनिकोड के बारे में सिर्फ आधुनिक सर्वोत्तम प्रथाओं का समर्थन कैसे किया जाता है ?

यदि आप निर्दिष्ट नहीं करते हैं कि आप किस एन्कोडिंग का मतलब है, तो जब एक एन्कोडिंग-विशिष्ट बग होता है, तो आप और कार्यान्वयनकर्ता में झगड़ा हो सकता है और आप दोनों सही होंगे। यही है, परिभाषा के अनुसार, एक फजी कल्पना का परिणाम है।

आगे जाकर, दुर्घटनाग्रस्त न होने के अलावा, सॉफ़्टवेयर को फ़ाइल नाम के साथ क्या करने की आवश्यकता है? इसे होना चाहिए…

  1. अपनी मूल एन्कोडिंग, बाइट-फॉर-बाइट में फ़ाइल नाम को संरक्षित करें?
  2. यूनिकोड के लिए सब कुछ सामान्य करें? यदि हां, तो क्या स्रोत एन्कोडिंग को ऑटो-डिटेक्ट करने की आवश्यकता है? किस तंत्र द्वारा?
  3. यूनीकोड ​​फॉर्म और ओरिजिनल दोनों को ही स्टोर करें, सामान्यीकरण विफल होने पर?

आपकी आवश्यकता का एक बेहतर संस्करण होगा

डाउनलोडर को कम से कम ASCII, ISO-8859-1, ISO-8859-15, KOI8-R, UTF-8, Shift-JIS, EUC-JP, GB2312, और Big5 सहित विभिन्न एन्कोडिंग में फ़ाइल नाम का समर्थन करना चाहिए। यदि वेब सर्वर प्रतिक्रिया एन्कोडिंग निर्दिष्ट करती है, तो इसका सम्मान किया जाना चाहिए। (यदि एन्कोडिंग अनिर्दिष्ट है, तो ISO-8859-1 को ग्रहण किया जा सकता है, या एक बेहतर अनुमान लगाया जा सकता है।) सामग्री प्रबंधन प्रणाली में यूनीकोड ​​प्रतिनिधित्व के लिए फाइलनाम को सामान्य किया जाएगा।

आवश्यक मानदंड के विशिष्ट उदाहरण स्वीकृति मानदंड को तैयार करने के लिए आवश्यक हैं। जोड़े गए वाक्य में बताया गया है कि सॉफ्टवेयर को क्या करना चाहिए, दुर्घटनाग्रस्त न होने से परे।


जबकि NTFS यूनीकोड ​​में फाइलनामों को संग्रहीत करता है, अधिकांश फ़ाइल सिस्टम किसी भी निर्दिष्ट एन्कोडिंग के बिना बाइट धाराओं के रूप में फाइलनाम को संग्रहीत करता है। उस मामले को देखते हुए, आपको यह भी पता चलेगा कि अनुमान लगाने के लिए क्या एन्कोडिंग है?
गाबे

@ Gabe वेब सर्वर, जब यह फ़ाइल परोसता है, तो एन्कोडिंग को इंगित कर सकता है। यदि नहीं, तो पाठ विश्लेषण विधियां भी हैं जो एन्कोडिंग का अनुमान लगा सकती हैं।
200_सेक्यूट

2
याद रखें, हम फ़ाइल नाम के बारे में बात कर रहे हैं, न कि फ़ाइल की सामग्री के बारे में। ऑड्स वेब सर्वर में फ़ाइल नाम की एन्कोडिंग जानने का कोई तरीका नहीं है, इसलिए यदि यह दावा करता है कि फ़ाइल नाम एक निश्चित एन्कोडिंग में है, तो यह संभवतः झूठ है। यदि आप UTF-8 से UTF-16 में परिवर्तित करने का प्रयास करते हैं, लेकिन आपका फ़ाइल नाम वास्तव में ISO-8859-1 है, तो आपको दुर्घटना होने की संभावना है। इसके अलावा, blogs.msdn.com/b/oldnewthing/archive/2007/04/17/2158334.aspx पाठ के फ़ाइल नाम-आकार के नमूनों से एन्कोडिंग का अनुमान लगाने के लिए कितना बुरा अनुमान है , इसका एक उदाहरण देखें ।
गाबे

@Gabe ध्यान दें कि मैंने ISO-8859-1 को डिफ़ॉल्ट के रूप में सुझाया था। इसके लिए एक कारण है - यह आपके द्वारा उल्लिखित खतरों से बहुत अधिक बचता है।
200_सेक्यूट

मुझे डर है कि यूटीएफ -8 पर्याप्त नहीं होगा - कम से कम खिड़कियों के कुछ संस्करणों (एफएटी फाइल सिस्टम) से आपको गैर-यूनिकोड स्थानीय एन्कोडिंग में फ़ाइलनाम मिलेंगे - जैसे जीत 1252 या जीत -1257; अपलोड करते समय ब्राउज़र फ़ाइलनामों को utf-8 में बदल सकता है लेकिन मुझे संदेह है।
पीटरिस 8

14

आपके द्वारा लिखी गई आवश्यकता में अच्छी आवश्यकता के लक्षण नहीं हैं । विशेष रूप से, यह सामंजस्यपूर्ण नहीं है, यह परमाणु नहीं है, और यह असंदिग्ध नहीं है। इन विशेषताओं की कमी के कारण, यह भी आसानी से सत्यापित नहीं होता है।

आपकी प्रारंभिक राज्य आवश्यकता है:

डाउनलोड की गई फ़ाइल का नाम गैर- ASCII वर्ण हो सकता है और इस के प्रसंस्करण से एप्लिकेशन क्रैश नहीं होगा

मैं "... हटाने की सलाह दूंगा और इस पर कार्रवाई करने से एप्लिकेशन क्रैश नहीं होगा"। यदि आपको कोई आवश्यकता है कि सॉफ़्टवेयर के एक टुकड़े को कुछ करने की आवश्यकता है, तो मुझे लगता है कि यह धारणा ठीक है कि सॉफ्टवेयर को क्रैश किए बिना इसे करना चाहिए।

यह आवश्यकता को इस में बदल देता है:

डाउनलोड की गई फ़ाइल का नाम गैर- ASCII वर्ण हो सकता है

अब, आपके पास एक सामंजस्यपूर्ण और परमाणु आवश्यकता है। हालाँकि, मुझे यकीन नहीं है कि यह असंदिग्ध है। अपने प्रश्न में, आप विभिन्न स्वरूपों का उल्लेख करते हैं। कुछ विकल्प हैं।

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

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

आप आवश्यकताओं का दस्तावेज कैसे बनाते हैं यह आपकी विशिष्ट आवश्यकताओं पर निर्भर करता है, हालांकि।


4

आपके शब्दों के साथ कुछ मुद्दे हैं जो आवश्यकता को कमजोर करते हैं:

1) आप में आवश्यकता व्यक्त करनी चाहिए सकारात्मक बल्कि यह होना चाहिए कि के मामले में की तुलना में, नियम भी नहीं । कैसे "दुर्घटनाग्रस्त नहीं" के लिए एक परीक्षण करता है।

2) वाक्यांश "डाउनलोड की गई फ़ाइल का नाम शामिल हो सकता है ..." अस्पष्ट है।

सुझाया गया वैकल्पिक शब्दांकन (विशुद्ध रूप से व्यक्तिपरक, निश्चित रूप से) हो सकता है:

एप्लिकेशन गैर-ASCII वर्णों से डाउनलोड की गई फ़ाइल नामों का समर्थन करेगा।

(शब्द "समर्थन" अभी भी थोड़ा अस्पष्ट है और आपके आवेदन के लिए अन्य आवश्यकताओं के साथ कॉन्सर्ट में लिया जाने पर इसे और अधिक ठोस होने के लिए बदला जा सकता है।)


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

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

1

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

मैं सुझाव दूंगा कि एक अच्छा युक्ति सकारात्मक रूप से निर्दिष्ट होना चाहिए कि क्या होना चाहिए, या फिर ध्यान दें कि कार्रवाई के कौन से पाठ्यक्रम स्वीकार्य हैं, उदाहरण के लिए "यदि किसी फ़ाइल नाम में अपरिचित वर्ण हैं, तो सिस्टम को समग्र ऑपरेशन के लिए एक नया GUID उत्पन्न करना चाहिए, और एक फ़ाइल नाम उत्पन्न करना चाहिए।" जो उस GUID, एक अनुक्रमणिका संख्या और मूल फ़ाइलनाम के किसी भी भाग को आसानी से समायोजित कर सकता है, यह पुराने और नए फ़ाइलनामों को मैप करने वाली तालिका का उत्पादन करना चाहिए "या" यदि किसी फ़ाइल नाम में अपरिचित वर्ण हैं, तो सिस्टम एक नया बना सकता है। " अक्षरों को पहचानने से नाम जो इसे पहचानता है; यदि दो फ़ाइल नाम ऐसे परिवर्तन के माध्यम से समान हो जाते हैं, तो या तो मनमाने ढंग से 'विजेता' घोषित किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.