2015-03-25 13 views
8

So ist es wirklich einfach, eine []byte in eine []rune zu dekodieren (einfach umwandeln zu string, dann Cast zu []rune funktioniert sehr schön, ich nehme an, dass es standardmäßig utf8 und mit Füllbytes für Invaliden). Meine Frage ist - wie sollen Sie diese []rune zurück zu []byte in utf8 Form decodieren?Wie kodiere [] Rune in [] Byte mit utf8 in Golang?

Fehle ich etwas oder muss ich manuell EncodeRune für jede einzelne Rune in meinem []rune anrufen? Sicherlich gibt es einen Encoder, den ich einfach an Writer übergeben kann.

+0

Siehe [Das Go Blog: Strings, Bytes, Runen und Zeichen in Go] (https://blog.golang.org/strings). –

+1

@DaveC Ich habe dieses Dokument mindestens 5 Mal gelesen und habe nicht gefunden, wonach ich gesucht habe. –

+2

Dann eine noch grundlegendere Quelle: https://golang.org/ref/spec#Conversions_to_and_from_a_string_type Kombinieren Sie # 3 und # 4 aus dieser Liste. –

Antwort

19

Sie können einfach eine Rune-Scheibe ([]rune) in string umwandeln, die Sie zurück in []byte konvertieren können.

Beispiel:

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

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

Output (versuchen Sie es auf dem Go Playground):

Hello 世界 
Hello 世界 

Die Go Specification: Conversions erwähnt dieser Fall ausdrücklich: Conversions to and from a string type, Punkt # 3:

eine Converting Scheibe von Runen zu einem String-Typ ergibt eine Zeichenfolge, die die Verkettung der einzelne Runenwerte in Strings konvertiert.

+2

Ah, also habe ich etwas verpasst, es machte für mich vollkommen Sinn 'string <-> [] byte', aber ich habe nicht den Sprung von '[] rune -> string -> [] byte' gemacht –