2008-10-27 17 views
7

में कनवर्ट करने का सबसे आसान तरीका सी में एक यूटीएफ -8 बाइट अनुक्रम में यूनिकोड कोडपॉइंट को परिवर्तित करने का सबसे आसान तरीका क्या है? यूटीएफ -32LE कोडपेज से यूटीएफ -8 तक मैप करने के लिए iconv का उपयोग करने का एकमात्र तरीका है, लेकिन यह ओवरकिल जैसा लगता है।यूनिकोड कोडपॉइंट को यूटीएफ -8

+0

मैं वैसे भी आइकनव के साथ जा रहा था। यह ओवरकिल की तरह प्रतीत हो सकता है, लेकिन यह बाहरी निर्भरताओं को पेश किए बिना एकमात्र वास्तविक समाधान की तरह लगता है। –

+0

तो क्यों @ जेस्पर के जवाब को स्वीकार न करें और इसे ऊपर उठाएं। – tvanfosson

+5

मैंने सोचा कि "अब प्रासंगिक नहीं है" जब किसी उत्पाद में एक बग तय किया जाता है, या बेहतर टूल पेश किया जाता है, न कि जब प्रश्नकर्ता उत्तर में दिलचस्पी नहीं लेता है ... –

उत्तर

7

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

+0

मैं पहले से ही लाइब्रेरी का उपयोग करने की योजना बना रहा था। –

+1

इस दिशा के लिए, यह एक बेहद सरल काम है। कोई पुस्तकालय की आवश्यकता नहीं है। साथ ही, 'iconv' दोनों को एक सी इंटरफ़ेस और POSIX में उपयोगिता प्रोग्राम दोनों को संदर्भित करता है। मुझे संदेह है कि ओपी सी इंटरफ़ेस के बारे में बात कर रहा था, जो इसके लिए एक बहुत अच्छा विकल्प होगा, लेकिन इसे स्वयं लिखना भी मुश्किल नहीं है। यह दूसरी दिशा है (यूटीएफ -8 को कोडपॉइंट्स) जो गड़बड़ करना आसान है। –

3

यूटीएफ 8 एनकोडेड बाइट्स के उच्चतम बिट्स में एन्कोडेड कोडपॉइंट की लंबाई को कोड करके काम करता है। http://en.wikipedia.org/wiki/UTF-8#Description

मुझे सी में यह छोटा फ़ंक्शन http://www.deanlee.cn/programming/convert-unicode-to-utf8/ मिला, हालांकि इसका परीक्षण नहीं किया गया।

+0

ध्यान दें कि यह कोड केवल 0x10000 के तहत कोड बिंदुओं को संभालता है (चूंकि विंडोज़ पर wchar_t वास्तव में यूटीएफ -16 है)। –

+1

वापस मशीन में कोड से लिंक करें: http://web.archive.org/web/20100305210636/http://www.deanlee.cn/programming/convert-unicode-to-utf8/ – Eloff

5

क्या मैं ICU सुझा सकता हूं? यह i18n मुद्दों को संभालने का एक उचित "उद्योग मानक" तरीका है।

मैंने स्वयं सी संस्करण का उपयोग नहीं किया है, लेकिन मुझे संदेह है कि ucnv_fromUnicode आपके द्वारा किए जाने वाले फ़ंक्शन हो सकता है।

+0

मैं नहीं जा रहा हूं इस कार्य के लिए गैर-सिस्टम-प्रदान की गई पुस्तकालयों के एक नए सेट पर निर्भरताएं लागू करें। फिर भी सुझाव के लिए धन्यवाद। –

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