GoのWAFであるEcho (https://github.com/labstack/echo) を使ってサイトを作成しています。そこでタイトルのような挙動に出くわしました。

つまり、
http://localhost:3000/tag/%E3%82%AA%E3%83%9E%E3%82%B1

というURLと
http://localhost:3000/tag/%e3%82%aa%e3%83%9e%e3%82%b1

というURLで得られる値が違うという結果になってしまいます。前者のURLではちゃんとデコードされますが、後者はデコードされずにエンコードされたままの文字列を取得します。なぜこのような挙動がおこるのでしょうか。

パスパラメータの取得部分のコードは以下のようになっています。

コード例

tagName := c.Param("name")
fmt.Println(tagName)

出力

前者の場合

オマケ

後者の場合

%e3%82%aa%e3%83%9e%e3%82%b1