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 }