8

go言語でrevelフレームワークを使用しています。最近、次のコードを実行すると:

import (
    ...
    "net/url"
    ...
)

revel.INFO.Println(url.QueryEscape("http://hello.com"))

私は得る

INFO  2014/07/09 14:58:34 user.go:39: http%A(MISSING)%F(MISSING)%F(MISSING)hello.com

もっと似たようなものを期待するとき

INFO  2014/07/09 14:58:34 user.go:39: http%3A%2F%2Fhello.com

%3A出力でが に置き換えられたのはなぜ%A(MISSING)ですか?どうすれば修正できますか?

「(MISSING)」という文字列を生成する可能性のある唯一のコードはfmtパッケージ内にありますが、net/urlソース コード パッケージを見ると、それがどのように発生するのかわかりません。 (そして壊れた?) go ライブラリのバージョン?私のセットアップに何か問題がある可能性がありますか?

関連: URL のエンコード / デコード

関連する Go ソース コード: http://golang.org/src/pkg/net/url/url.go?s=14330:14361#L553

4

1 に答える 1

5

revel.INFO.Printlnのようfmt.Printfに、フォーマット文字列と引数が必要です。文字を含む%文字列をログに記録するには、エスケープするか、引数として渡す必要があります。

revel.INFO.Println("The escaped URL is: %s", url.QueryEscape("http://hello.com"))

("%s"フォーマット文字列として使用することもできますが、コンテキストを提供する機会を利用しないでください。)

于 2014-07-09T19:51:34.227 に答える