golang base64 & utf-8

359 阅读1分钟

golang SDK内置base64 编码/解码 API

下面两个编码效果是一样的,不过base64.URLEncoding常用于编码URL或文件路径。

String

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {

    // String to encode
    str := "hello world"

    // base64.StdEncoding: Standard encoding with padding
    // It requires a byte slice so we cast the string to []byte
    encodedStr := base64.StdEncoding.EncodeToString([]byte(str))
    fmt.Println("Encoded:", encodedStr)

    // Decoding may return an error, in case the input is not well formed
    decodedStr, err := base64.StdEncoding.DecodeString(encodedStr)
    if err != nil {
        panic("malformed input")
    }
    fmt.Println("Decoded:", string(decodedStr))
}	

  • 运行
Encoded: aGVsbG8gd29ybGQ=
Decoded: hello world

URL

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {

	// String to encode
	str := "https://www.baidu.com/query?username=hello"

	// It requires a byte slice so we cast the string to []byte
	encodedStr := base64.URLEncoding.EncodeToString([]byte(str))
	fmt.Println("Encoded:", encodedStr)

	// Decoding may return an error, in case the input is not well formed
	decodedStr, err := base64.URLEncoding.DecodeString(encodedStr)
	if err != nil {
		panic("malformed input")
	}

	fmt.Println("Decoded:", string(decodedStr))
}

utf-8

计算字符长度

package main

import (
"fmt"
"unicode/utf8"
)

func main() {
	str := "Hello, 世界"
	fmt.Println("bytes =", len(str))
	fmt.Println("runes =", utf8.RuneCountInString(str))

	//Output:
	//
	//bytes = 13
	//runes = 9
}