2014-09-25 12 views
10

isascii() मैनपेज के अनुसार:isascii() को बहिष्कृत क्यों किया जाता है?

http://linux.die.net/man/3/isascii

POSIX.1-2008 निशान isascii() के रूप में अप्रचलित, यह देखते हुए कि यह नहीं किया जा portably एक स्थानीय आवेदन में इस्तेमाल किया जा सकता है।

मुझे यकीन नहीं है कि मुझे पोर्टेबिलिटी समस्या कहां है। इस फ़ंक्शन का एक बहुत ही सरल कार्यान्वयन है:

int isascii(int ch) { return ch >= 0 && ch < 128; } 

उपरोक्त कार्यान्वयन में कौन सी परिस्थितियां पर्याप्त या पोर्टेबल नहीं हैं?

आप

+0

@ सैय्यमदोशी: क्या यह कुछ अलग करता है? – Thilo

+1

चाहे वह कार्यान्वयन पर्याप्त है और पोर्टेबल इस बात का निर्भर करता है कि आप इस फ़ंक्शन का उपयोग किस प्रकार करना चाहते हैं। आपके दिमाग में क्या है? – hvd

+4

फ़ंक्शन निश्चित रूप से उन सिस्टमों के लिए पोर्टेबल नहीं है जो आईबीएम मेनफ्रेम जैसे पात्रों के लिए ASCII एन्कोडिंग का उपयोग नहीं कर रहे हैं। –

उत्तर

3

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

उदाहरण के लिए, Shift-JIS में, दूसरा बाइट 0x40 पर शुरू हो सकता है, जो ASCII के साथ ओवरलैप हो जाता है। और यहां तक ​​कि पहले बाइट में, कुछ मामूली बदलाव हैं, जैसे कि 0x5C (बैकस्लैश के बजाय मुद्रा चिह्न) या 0x7E (टिल्ड के बजाए कुछ प्रकार का स्लैश)।

इस समारोह बल्कि व्यर्थ है:

मैं इस article जहां किसी को अपने स्वयं के ओएस डिजाइन में POSIX कार्यों की गैर शामिल किए जाने के पीछे कारण बताया गया है पाया। यदि हम एक वर्ण एन्कोडिंग का उपयोग करते हैं जो एएससीआई संगत नहीं था, तो यह समझ में नहीं आता है। अगर हम इस तरह के UTF-8 के रूप में एक समझदार चरित्र एन्कोडिंग का उपयोग करें, तो आप बस देख सकते हैं कि मूल्य अधिक से अधिक 127.

+0

मुझे लगता है कि वह विशिष्ट एन्कोडिंग के लिए पूछ रहा है जिसमें यह सच होगा, और मैं किसी के बारे में नहीं सोच सकता। एन्कोडिंग जो मुझे शुरुआती 128 मानों को ओवरलैप करने के बारे में पता है। – thang

0

meeting minutes है इस है कहने के लिए:

isascii: मार्क अप्रचलित । आवेदन उपयोग ध्यान रखना चाहिए कि इसका उपयोग स्थानीयकृत एप्लिकेशन में पोर्टेबल रूप से नहीं किया जा सकता है।

+0

जो वास्तव में हमें कुछ भी नहीं बताता है, है ना? वह पूछ रहा है * क्यों * इसे स्थानीयकृत एप्लिकेशन में पोर्टेबल रूप से उपयोग नहीं किया जा सकता है। –

+1

किसी के पास निर्णय के मूल स्रोत का हवाला देना अभी भी अच्छा है। पॉज़िक्स से मूल तर्क के रूप में हम यह सबसे अच्छा हो सकते हैं। –

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