Golangでパーセントエンコーディング
Goには標準のurlパッケージにQueryEscape()関数が用意されているので、これを利用してパーセントエンコーディングができます。
しかし、単純にQueryEscape()を使うと、以下のように半角スペースが+と表示されてしまいます。
package main
import (
"fmt"
"net/url"
)
func main() {
str := "パーセント エンコーディング"
str = url.QueryEscape(str)
fmt.Println(str)
// %E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88+%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0
}
ASCIIコード表を見ると半角スペースには0x20が割り当てられているので、これを置換してあげればOKです。
package main
import (
"fmt"
"net/url"
"regexp"
)
func main() {
str := "パーセント エンコーディング"
str = url.QueryEscape(str)
str = regexp.MustCompile(`([^%])(\+)`).ReplaceAllString(str, "$1%20")
fmt.Println(str)
// %E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%20%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0
}