2009-12-03 8 views
5

मुझे पहले चरित्र एन्कोडिंग समस्याओं के बारे में अस्पष्ट जागरूकता थी, लेकिन answers to a question today मुझे इसके बारे में सोचने लगा। भी विचार के लिए निम्नलिखित प्रदान की अधिक भोजन:स्पष्ट चरित्र एन्कोडिंग और एन्कोडिंग/डिकोडिंग को पर्ल में "सर्वोत्तम अभ्यास" के रूप में प्रचारित किया जाना चाहिए?

perlunitut - Perl Unicode Tutorial

perlunifaq - Perl Unicode FAQ

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

केवल जगह है कि मैं वर्ण एन्कोडिंग बताते हुए का उल्लेख देखा है (उदाहरण के लिए हम में से ज्यादातर के लिए use utf8;) हमारे स्रोत कोड का "सर्वोत्तम अभ्यास" के रूप में पहले उल्लिखित question के उत्तरों में था।

इसके अलावा, perlunitut उल्लेख करता है कि हमें पर्ल कार्यक्रमों में हमारे "मानक शीर्षक" में use Encode qw{encode decode}; होना चाहिए। इस प्रकार ऐसा लगता है कि सभी इनपुट को डीकोड करने और सभी आउटपुट को एन्कोड करने के लिए एक और "सर्वोत्तम अभ्यास" होना चाहिए।

आपको क्या लगता है?

उत्तर

14

use utf8 वास्तव में इसके साथ काफी कम करने के लिए है - लगभग कोई भी यूनिकोड पहचानकर्ताओं का उपयोग नहीं करता है, और एक कोड आसानी से कोड में यूटीएफ -8 स्ट्रिंग अक्षर सहित बिना एन्कोडिंग-जागरूक हो सकता है।

लेकिन हाँ, सबसे अच्छा ज्ञान है कि मैं एन्कोडिंग से निपटने के लिए के बारे में पता यह है:

  • हमेशा यह जानें कि जहां अपने डेटा से आ रही है और यह कैसे स्वरूपित है, और जल्द से जल्द इसे डिकोड (जब तक यह है बाइट्स के रूप में संसाधित करने के लिए मतलब था)।
  • हमेशा उस डेटा प्रारूप को समझें जिसे आप लिख रहे हैं या आपका ग्राहक क्या उम्मीद कर रहा है, और आउटपुट पर एन्कोड करें (जब तक कि आपका डेटा पहले से बाइट न हो)।
  • और जब पाठ की बात आती है, तो हमेशा अपने कार्यक्रम के "इंटीरियर" में चरित्र तारों के साथ काम करें।

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

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

+0

आपके उत्तर के लिए धन्यवाद। मैं सोच रहा हूं कि आपके प्रोग्राम के "इंटीरियर" से क्या मतलब है। –

+0

मेरा मतलब है कि कार्यक्रम का मूल तर्क - जो कुछ भी आपके प्रोग्राम या लाइब्रेरी करता है, वह बाहरी दुनिया से बात करने वाले हिस्सों के विपरीत होता है। – hobbs

संबंधित मुद्दे