英文:
URL Escaping producing "%A(MISSING)" instead of "%3A"
问题
我正在使用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)"
的Go代码是在 fmt
包中,但从查看 net/url
源代码包中,我不明白为什么会发生这种情况。我可能在访问旧版本(有问题的版本)的Go库吗?还是我的设置可能出了其他问题?
相关链接:https://stackoverflow.com/questions/13820280/encode-decode-urls
相关的Go源代码:http://golang.org/src/pkg/net/url/url.go?s=14330:14361#L553
英文:
I am using the revel framework with the go language. Recently, when I run the following code:
import (
...
"net/url"
...
)
revel.INFO.Println(url.QueryEscape("http://hello.com"))
I get
INFO 2014/07/09 14:58:34 user.go:39: http%A(MISSING)%F(MISSING)%F(MISSING)hello.com
When I expect to get something more like
INFO 2014/07/09 14:58:34 user.go:39: http%3A%2F%2Fhello.com
Why has %3A
been replaced by %A(MISSING)
in the output and how can I fix it?
The only go code where I see something that might produce the string "(MISSING)' is in the fmt
package, but from looking at the net/url
source code package, I don't see how that could be happening. Am I perhaps somehow accessing an old (and broken?) version of the go libraries? Is something else possibly wrong with my setup?
Related: https://stackoverflow.com/questions/13820280/encode-decode-urls
Relevant Go Source code: http://golang.org/src/pkg/net/url/url.go?s=14330:14361#L553
答案1
得分: 7
revel.INFO.Println
类似于 fmt.Printf
,它需要一个格式字符串和参数。如果要记录包含 %
字符的字符串,你可以选择对其进行转义,或者更好地将其作为参数传递:
revel.INFO.Println("转义后的URL是:%s", url.QueryEscape("http://hello.com"))
(你也可以只使用 "%s"
作为格式字符串,但为什么不趁机提供上下文呢?)
英文:
revel.INFO.Println
is like fmt.Printf
, it expects a format string and arguments. To log a string that contains %
characters you either need to escape it, or better pass it as an argument:
revel.INFO.Println("The escaped URL is: %s", url.QueryEscape("http://hello.com"))
(You could just use "%s"
as the format string, but why not take the chance to provide context.)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论