2013-03-11 22 views
14

Burada kodum var ve kod çözme işlevinin neden çalışmadığını anlamıyorum.Encode/Decode base64

Küçük bir fikir lütfen harika olur.

func EncodeB64(message string) (retour string) { 
    base64Text := make([]byte, base64.StdEncoding.EncodedLen(len(message))) 
    base64.StdEncoding.Encode(base64Text, []byte(message)) 
    return string(base64Text) 
} 

func DecodeB64(message string) (retour string) { 
    base64Text := make([]byte, base64.StdEncoding.DecodedLen(len(message))) 
    base64.StdEncoding.Decode(base64Text, []byte(message)) 
    fmt.Printf("base64: %s\n", base64Text) 
    return string(base64Text) 
} 

Beni gaves: [Kod çözme hatası - çıkış değil utf-8] [Decode hatası - çıkış değil utf-8]

cevap

9

DecodedLen, en yüksek uzunluğunu döndürür.

Bu uzunluk, arabelleğinizin boyutlandırılması için kullanışlıdır, ancak arabelleğin bir kısmı yazılmayacak ve bu nedenle geçerli bir UTF-8 olmayacaktır.

Sadece Decode işlevi tarafından döndürülen gerçek yazılı uzunluğu kullanmanız gerekir.

l, _ := base64.StdEncoding.Decode(base64Text, []byte(message)) 
log.Printf("base64: %s\n", base64Text[:l]) 
11

len öneki yüzeysel ve geçersiz utf-8 hataya neden olur: (Ayrıca here)

package main 

import (
     "encoding/base64" 
     "fmt" 
     "log" 
) 

func main() { 
     str := base64.StdEncoding.EncodeToString([]byte("Hello, playground")) 
     fmt.Println(str) 

     data, err := base64.StdEncoding.DecodeString(str) 
     if err != nil { 
       log.Fatal("error:", err) 
     } 

     fmt.Printf("%q\n", data) 
} 


çıkış

SGVsbG8sIHBsYXlncm91bmQ= 
"Hello, playground" 

DÜZENLEME: Çok hızlı okudum, len bir önek olarak kullanılmadı. Dystroy haklı çıktı.

3

burada kodlamak için iki basit işlevleri/kod çözme Base64 dizeleri Go ile olan diğer iki mesajları Özetle:

// Dont forget to import "encoding/base64"! 

func base64Encode(str string) string { 
    return base64.StdEncoding.EncodeToString([]byte(str)) 
} 

func base64Decode(str string) (string, bool) { 
    data, err := base64.StdEncoding.DecodeString(str) 
    if err != nil { 
     return "", true 
    } 
    return string(data), false 
} 

Try it!

İlgili konular