2015-03-25 33 views
8

Vì vậy, thật dễ dàng để giải mã []byte thành một []rune (chỉ cần truyền tới string, sau đó truyền tới []rune hoạt động rất độc đáo, tôi giả định nó mặc định là utf8 và với byte phụ cho người tàn tật). Câu hỏi của tôi là - làm cách nào bạn giả sử giải mã số này []rune quay lại []byte dưới dạng utf8?Cách mã hóa [] rune thành [] byte bằng utf8 trong golang?

Tôi có thiếu gì đó không hoặc tôi có gọi theo cách thủ công EncodeRune cho mỗi lần chạy đơn lẻ trong số []rune của mình không? Chắc chắn có một bộ mã hóa mà tôi chỉ có thể vượt qua một Writer đến.

+0

Xem [Blog đi: Chuỗi, byte, rune và ký tự trong Go] (https://blog.golang.org/strings). –

+1

@DaveC Tôi đã đọc tài liệu đó ít nhất 5 lần và không tìm thấy những gì tôi đang tìm kiếm. –

+2

Sau đó, một nguồn cơ bản hơn nữa: https://golang.org/ref/spec#Conversions_to_and_from_a_string_type Kết hợp # 3 và # 4 từ danh sách đó. –

Trả lời

19

Bạn chỉ cần chuyển đổi một lát cắt ([]rune) thành string mà bạn có thể chuyển đổi về []byte.

Ví dụ:

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

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

Output (thử nó trên Go Playground):

Hello 世界 
Hello 世界 

Các Go Specification: Conversions đề cập đến trường hợp này một cách rõ ràng: Conversions to and from a string type, điểm # 3:

Chuyển đổi một lát rune thành một kiểu chuỗi tạo ra một chuỗi là sự nối của giá trị rune riêng lẻ được chuyển đổi thành chuỗi.

+2

Ah vì vậy tôi đã thiếu một cái gì đó, nó làm cho cảm giác hoàn hảo với tôi 'chuỗi <-> [] byte', nhưng tôi đã không thực hiện bước nhảy từ' [] rune -> string -> [] byte' –

Các vấn đề liên quan