2016-04-20 8 views
6

मेरे पास अनंत आकार (यानी बहुत बड़े आकार के) के UTF8 byte[] हैं। मैं इसे केवल 1024 बाइट्स पर छोटा करना चाहता हूं और फिर इसे स्ट्रिंग में परिवर्तित करना चाहता हूं।यूटीएफ 8 बाइट [] स्ट्रिंग रूपांतरण

Encoding.UTF8.GetString(byte[], int, int) मेरे लिए यह करता है। यह पहले 1024 बाइट्स को छोटा करता है और फिर मुझे इसकी परिवर्तित स्ट्रिंग देता है।

लेकिन इस रूपांतरण में, यदि अंतिम चरित्र यूटीएफ 8 चरित्र सेट का है, जो 2 बाइट्स से बना है और जिसका पहला बाइट रेंज में आता है और दूसरा बाइट रेंज से बाहर है तो यह परिवर्तित स्ट्रिंग में उस वर्ण के लिए ? प्रदर्शित करता है।

क्या कोई तरीका है ताकि यह ? परिवर्तित स्ट्रिंग में नहीं आए?

उत्तर

6

यही है Decoder कक्षा के लिए है।

Encoding.UTF8.GetDecoder().GetChars(buffer, 0, 1024, charBuffer, 0) 
बेशक

, जब कोड सूत्री बीच में विभाजित है, Decoder एक साथ छोड़ दिया जाता है: जबकि सही ढंग से आंशिक कोड-अंक को संभालने के लिए पर्याप्त स्थिति को बनाए रखने यह आपको char डेटा में byte डेटा स्ट्रीम करने के लिए अनुमति देता है अपने राज्य में "आंशिक चार", लेकिन यह आपके मामले में आपको चिंता नहीं करता है (और अन्य सभी उपयोग मामलों में वांछनीय है :))।

+0

मुझे नहीं पता कि पॉइंटर्स से कैसे निपटें। आपके समाधान की कोई मदद या विकल्प? – pratik03

+0

@ pratik03 कोई पॉइंटर्स शामिल नहीं है - 'char * '(और' बाइट * ') अधिभार के बजाय' char []' (और 'बाइट []') अधिभार का उपयोग करें। – Luaan

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