यूनिकोड के विभिन्न एन्कोडिंग में, उदाहरण के लिए यूटीएफ -16le या यूटीएफ -8, एक चरित्र 2 या 3 बाइट्स पर कब्जा कर सकता है। कई यूनिकोड अनुप्रयोग यूनिकोड वर्णों की प्रदर्शन चौड़ाई की देखभाल नहीं करते हैं जैसे कि वे सभी लैटिन अक्षरों हैं। उदाहरण के लिए, -column पाठ में, चाहिए चीनी अक्षरों या एक पंक्ति में लैटिन वर्ण, लेकिन सबसे अधिक आवेदन (ग्रहण, नोटपैड की तरह ++ और सभी प्रसिद्ध पाठ संपादक शामिल है जो, मैं हिम्मत हो, तो कोई अच्छा अपवाद) बस प्रत्येक चीनी चरित्र को लैटिन अक्षर के रूप में 1 चौड़ाई के रूप में गिनें। यह निश्चित रूप से परिणाम प्रारूप बदसूरत और गैर गठबंधन बनाते हैं।यूनिकोड वर्णों की पसंदीदा प्रदर्शन चौड़ाई (कॉलम में) को कैसे जानें?
उदाहरण के लिए, 8 के एक टैब-चौड़ाई निम्नलिखित बदसूरत परिणाम (1 प्रदर्शन चौड़ाई के रूप में सभी यूनिकोड गिनती) मिल जाएगा:
apple 10
banana 7
苹果 6
猕猴桃 31
pear 16
हालांकि, उम्मीद प्रारूप है (2 चौड़ाई के रूप में प्रत्येक चीनी चरित्र गणना):
apple 10
banana 7
苹果 6
猕猴桃 31
pear 16
वर्ण के प्रदर्शन चौड़ाई पर अनुचित गणना इन संपादकों पूरी तरह से बेकार जब टैब-संरेखण, और पंक्ति लपेटना और पैरा पुनः स्वरूपित कर सकते हैं।
हालांकि, एक चरित्र की चौड़ाई अलग-अलग फ़ॉन्ट्स के बीच भिन्न हो सकती है, लेकिन फिक्स्ड-साइज टर्मिनल फ़ॉन्ट के सभी मामलों में, चीनी चरित्र हमेशा डबल चौड़ाई होता है। ऐसा कहने के लिए, फ़ॉन्ट के बावजूद, प्रत्येक चीनी चरित्र को 2 चौड़ाई में प्रदर्शित करना पसंद किया जाता है।
समाधान में से एक मैं सही चौड़ाई परिवर्तित द्वारा एन्कोडिंग जीबी 2312 को, जीबी 2312 में प्रत्येक चीनी चरित्र एन्कोडिंग 2 बाइट्स लेता है प्राप्त कर सकते हैं, है। हालांकि, कुछ यूनिकोड वर्ण GB2312 वर्णमाला (या GBK वर्णसेट) में मौजूद नहीं हैं। और, सामान्य रूप से बाइट्स में एन्कोडेड आकार से प्रदर्शन चौड़ाई की गणना करना एक अच्छा विचार नहीं है।
यूनिकोड में सभी वर्णों की गणना करने के लिए (\u0080
.. \uFFFF
) के रूप में 2 चौड़ाई भी सही नहीं है, क्योंकि सीमा में बिखरे हुए कई 1-चौड़ाई वाले वर्ण भी हैं।
अरबी अक्षरों और कोरियाई अक्षरों की प्रदर्शन चौड़ाई की गणना करते समय भी मुश्किल है, क्योंकि वे यूनिकोड कोड बिंदुओं की मनमानी संख्या से शब्द/चरित्र बनाते हैं।
तो, यूनिकोड कोड बिंदु की डिस्प्ले चौड़ाई शायद एक पूर्णांक नहीं है, मुझे लगता है कि ठीक है, उन्हें अभ्यास में पूर्णांक के लिए ग्राउंड किया जा सकता है, कम से कम किसी से भी बेहतर नहीं।
तो, यूनिकोड मानक में एक char की पसंदीदा प्रदर्शन चौड़ाई से संबंधित कोई विशेषता है? या किसी भी जावा लाइब्रेरी फ़ंक्शन प्रदर्शन चौड़ाई की गणना करने के लिए?
मुझे लगता है कि समस्या यह है कि चौड़ाई फ़ॉन्ट पर निर्भर है, इसलिए आप या तो वर्णों की गणना करते हैं (जिसमें आपको समस्या है), या आप स्ट्रिंग-इन-फ़ॉन्ट लंबाई की गणना करते हैं, और इसका उपयोग करते हैं। –