2012-03-29 11 views
7

क्या सी में ऊपरी मामले में यूटीएफ -8 स्ट्रिंग को परिवर्तित करने का कोई पोर्टेबल तरीका है? यदि नहीं, तो ऐसा करने के लिए लिनक्स तरीका क्या है?मैं यूटीएफ -8 स्ट्रिंग को ऊपरी मामले में कैसे परिवर्तित करूं?

उत्तर

8

ऐसा करने का पोर्टेबल तरीका यूनिकोड जागरूक पुस्तकालय जैसे ICU का उपयोग करना होगा। ऐसा लगता है कि u_strToUpper ऐसा फ़ंक्शन हो सकता है जिसे आप ढूंढ रहे हैं।

+3

एक नोट के रूप में, आईसीयू आपको यूटीएफ -8 -> यूटीएफ -16 -> अपरकेस यूटीएफ -16 -> अपरकेस यूटीएफ -8 को बदलने की आवश्यकता होगी। (वास्तव में अन्य पुस्तकालय नहीं हैं जो ऐसा करते हैं।) –

0

ऐसा करने का वैधानिक तरीका wchar_t के साथ है - यदि आपके पास विस्तृत वर्णों की एक स्ट्रिंग है और अपने विस्तृत पात्रों के साथ टॉव्लॉवर/टॉउपर/टॉवट्रान का उपयोग करें (जो आपके लोकेल को सही ढंग से सेट किया गया है तो काम करेगा)। तो आपको अपनी यूटीएफ -8 स्ट्रिंग लेने की आवश्यकता है, इसे एक विस्तृत-वर्ण स्ट्रिंग में परिवर्तित करें, और उसके बाद उन कार्यों का उपयोग करें जो wchar_t को लेते हैं और फिर वापस कनवर्ट करते हैं।

यह एक विशाल पिटा है इसलिए आप ICU जैसे समर्थित, ओपन-सोर्स यूनिकोड लाइब्रेरी का उपयोग कर शायद बेहतर हो सकते हैं।

+1

नहीं, यह गलत है। जर्मन पाठ (उदाहरण के लिए) के साथ काम करना असंभव है, क्योंकि ß का अपरकेस संस्करण एसएस है, जो दो अक्षर हैं। यह एकमात्र उदाहरण से बहुत दूर है जहां यह टूटता है, लेकिन सबसे आम है। –

+0

सच है, लेकिन यह एकमात्र संस्करण है जो पॉज़िक्स-मानक पुस्तकालयों का उपयोग करके सही करने के करीब भी है (साथ ही मैं यूनिकोड मानक को दोष देता हूं जो प्रारंभ में वर्णों के बीच 1: 1 केस मैपिंग निर्दिष्ट करता है)। –

+0

@ जैकोब पूर्ण फेजिंग पुराने सरल सरल सरल आवरण की तुलना में बहुत बेहतर परिणाम देता है, और अब हम इसे कई सालों से जानते हैं। यही कारण है कि जावा और पर्ल जैसी भाषाएं तारों के लिए अपने आकस्मिक कार्यों पर पूर्ण आवरण प्रदान करती हैं। कोडपॉइंट-बाय-कोडपॉइंट काम न करें; यह सिर्फ काम नहीं करता है। आपको पूरी स्ट्रिंग की आवश्यकता है। – tchrist

8

ग्लिब g_utf8_strup() है।

+1

मुझे यकीन है कि यह सही जवाब है, लेकिन किसी कारण से मुझे 'man g_utf8_strup' चलाने से g_utf8_strup' के लिए कोई मैन्युअल प्रविष्टि नहीं मिलती है, यह' nm /opt/local/lib/libglib-2.0.a | grep g_utf8_strup' साबित करता है कि यह वहां है। यह वास्तव में superstupid है। FTFSF। – tchrist

+1

@ क्रिसमस: बेवकूफ सापेक्ष है; प्रत्येक ग्लिब फ़ंक्शन के लिए एक मैन पेज के परिणामस्वरूप 100 + एमबी मैन पेज –

+0

@ IgnacioVazquez-Abrams: यह देखकर कि ** असम्पीडित एचटीएमएल ** संस्करण 75 एमबी पर कैसे वजन करता है, मुझे आपके अनुमान पर भरोसा नहीं है। – ninjalj

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