testing - Why do my Perl tests fail with `use encoding 'utf8'`? -


मुझे इस परीक्षा स्क्रिप्ट से हैरान हूँ:

  #! Perl का उपयोग सख्त; चेतावनियों का उपयोग करें; उपयोग एन्कोडिंग 'utf8'; टेस्ट :: अधिक 'no_plan' का उपयोग करें; ठीक है ('एएए' = एम / एए /, 'ठीक सीधा मैच'); मेरी $ re = qr {á}; ठीक है ('एएए' = ~ एम / $ पुनः /, 'ठीक qr- आधारित मैच'); जैसे ('ए', $ पुनः, 'जैसे qr- आधारित मैच'); तीन परीक्षण विफल, लेकिन मुझे उम्मीद थी कि  उपयोग एन्कोडिंग 'utf8'  दोनों शाब्दिक  áá  और < कोड> qr  आधारित regexps utf8 तार करने के लिए, और इस तरह परीक्षणों को पारित कर रहा है। 

अगर मैं एन्कोडिंग का उपयोग करें utf8 मोड में वे असफल क्यों होंगे।

मै मैक ओएस एक्स (सिस्टम संस्करण) पर पर्ल 5.8.8 का उपयोग कर रहा हूं।

न करें का उपयोग करें यह टूटा हुआ है। (जारेड वालबोएर ने एक महान भाषण दिया जहां उन्होंने YAPC :: EU 2k8 में इसका उल्लेख किया था।)

यह कम से कम दो चीजें एक साथ होती हैं जो एक साथ नहीं होते हैं:

  1. यह आपकी स्रोत फ़ाइल के लिए एक एन्कोडिंग निर्दिष्ट करता है।
  2. यह आपके फ़ाइल इनपुट / आउटपुट के लिए एक एन्कोडिंग निर्दिष्ट करता है।

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

अपने स्रोत कोड को केवल एएससीआईआई या यूटीएफ -8 में लिखें उत्तरार्द्ध मामले में, उपयोग करने के लिए सही बात है यदि आप UTF-8 का उपयोग नहीं करना चाहते हैं, लेकिन आप गैर-एएससीआईआई वर्णकों को शामिल करना चाहते हैं, तो उन्हें बचाना या स्पष्ट रूप से डीकोड करना चाहते हैं।

और I / O परतें स्पष्ट रूप से उपयोग करें या उन्हें I / O स्वचालित रूप से ट्रांसकोड करने के लिए


Comments