2015-03-25 6 views
8

तो को []rune में डालना वास्तव में आसान है (बस string पर डाला गया है, फिर []rune पर बहुत अच्छी तरह से काम करता है, मुझे लगता है कि यह utf8 के लिए डिफ़ॉल्ट है और invalids के लिए filler बाइट्स के साथ)। मेरा सवाल है - आप इस []rune को यूटीएफ 8 फॉर्म में []byte पर डीकोड करने का अनुमान कैसे लगा रहे हैं?गोलांग में utf8 का उपयोग करके [] बाइट [] बाइट में कैसे एन्कोड करें?

क्या मुझे कुछ याद आ रहा है या क्या मैंने अपने []rune में प्रत्येक एकल रन के लिए मैन्युअल रूप से EncodeRune पर कॉल किया है? निश्चित रूप से एक एन्कोडर है कि मैं बस Writer को पास कर सकता हूं।

+0

देखें [जाओ ब्लॉग: स्ट्रिंग्स, बाइट्स, रन और कैरेक्टर इन गो] (https://blog.golang.org/strings)। –

+1

@ डेवसी मैंने उस दस्तावेज़ को कम से कम 5 बार पढ़ा है और जो भी मैं ढूंढ रहा था उसे नहीं मिला। –

+2

फिर एक और अधिक मूल स्रोत: https://golang.org/ref/spec#Conversions_to_and_from_a_string_type उस सूची से # 3 और # 4 को संयोजित करें। –

उत्तर

19

आप बस एक रन स्लाइस ([]rune) string में कनवर्ट कर सकते हैं जिसे आप []byte पर वापस परिवर्तित कर सकते हैं।

उदाहरण:

rs := []rune{'H', 'e', 'l', 'l', 'o', ' ', '世', '界'} 
bs := []byte(string(rs)) 

fmt.Printf("%s\n", bs) 
fmt.Println(string(bs)) 

आउटपुट (Go Playground पर यह कोशिश):

Hello 世界 
Hello 世界 

Go Specification: Conversions स्पष्ट रूप से इस मामले का उल्लेख है: Conversions to and from a string type, बिंदु # 3:

एक परिवर्तित एक स्ट्रिंग प्रकार में रनों का टुकड़ा एक स्ट्रिंग उत्पन्न करता है जो कि संगतता है अलग-अलग रनवे मान तारों में परिवर्तित हो जाते हैं।

+2

आह इसलिए मुझे कुछ याद आ रहा था, यह मुझे 'स्ट्रिंग <-> [] बाइट' के लिए सही समझ में आया, लेकिन मैंने '[] rune -> string -> [] बाइट' से कूद नहीं बनाया –

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