2015-03-25 18 views
8

Więc to jest naprawdę łatwe do odkodowania []byte do []rune (po prostu obsadzone do string, a następnie rzutować na []rune działa bardzo ładnie, Zakładam, że domyślnie utf8 i bajtów wypełniacz dla inwalidów). Moje pytanie brzmi - w jaki sposób można dekodować ten []rune z powrotem do []byte w postaci utf8?Jak zakodować [] rune na [] bajt za pomocą utf8 w golangu?

Czy brakuje mi czegoś lub czy ręcznie zadzwoniłem pod numer EncodeRune dla każdej pojedynczej runy w moim []rune? Z pewnością jest koder, który mogę po prostu przekazać Writer do.

+0

Zobacz [Blog Go: ciągi, bajty, runy i postacie w Go] (https://blog.golang.org/strings). –

+1

@DaveC Czytałem ten dokument co najmniej 5 razy i nie znalazłem tego, czego szukałem. –

+2

Następnie jeszcze bardziej podstawowe źródło: https://golang.org/ref/spec#Conversions_to_and_from_a_string_type Połącz # 3 i # 4 z tej listy. –

Odpowiedz

19

Możesz po prostu przekonwertować plaster runy ([]rune) na string, który możesz przekonwertować z powrotem na []byte.

Przykład:

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

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

Output (spróbuj go na Go Playground):

Hello 世界 
Hello 世界 

Go Specification: Conversions wspomina ten przypadek wyraźnie: Conversions to and from a string type punkt # 3:

przekształcania kawałek run na typ łańcucha daje ciąg, który jest konkatenacją indywidualne wartości runy konwertowane na ciągi.

+2

Ah, więc czegoś mi brakowało, to miało dla mnie idealny sens 'string <-> [] byte', ale nie zrobiłem tego skoku z' [] rune -> string -> [] byte' –