【问题标题】:Printing URLs with fmt.Printf behaves weirdly使用 fmt.Printf 打印 URL 的行为很奇怪
【发布时间】:2018-03-20 09:36:53
【问题描述】:

如果我将数据库中的 url 保存为

https://xxx.amazonaws.com/sub%2Fsub1/1495771021869-3sx5ims88vu-12f63aaa7d278435e1800486b31f9cc7/xxx.jpg

http.ResponseWriter 以如下格式返回

https://xxx.amazonaws.com/sub!F(MISSING)sub1/1495771021869-3sx5ims88vu-12f63aaa7d278435e1800486b31f9cc7/xxx.jpg

在上面的 url 中你可以看到 %2F 被替换为 !F(MISSING)

谁能帮忙解决这个问题

以下是代码sn -p ``rs.WriteHeader(retObj.HttpStatus)

jsonStr, res := ConvObjectToJSON(retObj)
if res != nil {
    Logger(ctx, cnst.LogError, "In writeReturnError error in ConvObjectToJSON: %v Original object:%v",
        res.GetMessageWDetails(), retObj)
    rs.WriteHeader(http.StatusInternalServerError)
    return
}

var consoleLog *log.Logger = log.New(os.Stdout, cnst.LogPrefix, log.Ldate|log.Ltime)
consoleLog.Print(jsonStr)

cnt, err := fmt.Fprintf(rs, jsonStr)
if nil == err && 0 < cnt {
    rs.Header().Set("Content-Type", "application/json")
} else {
    Logger(ctx, cnst.LogError, "In writeReturnError error in fmt.Fprintf: %v Original JSON:%v",
        err.Error(), jsonStr)
    rs.WriteHeader(http.StatusInternalServerError)
}

``

我对 fmt.Fprintf 有疑问

【问题讨论】:

  • 请将sn-p粘贴到你使用的地方?
  • 这似乎是 Printf 语句的问题。跑去兽医。
  • 只是不要使用 Fprintf。你希望 Fprintf 做什么?如果您不能容忍来自 Fprintln 的换行符,或者使用 Fprintf(rs, "%s", whatever")。
  • @Volker,感谢您的建议,Fprintf(rs, "%s", whatever") 工作正常
  • Fprintf(rs, "%s", whatever")Fprint(rs, whatever) 慢。它必须先解析格式,进行一些字符串计算,然后才能最终将其写入编写器。

标签: url go


【解决方案1】:

正如 cmets 中也提到的:您的问题是 Fprintf 使用第二个参数作为格式,将每个 % 解释为它应该在那里插入一个变量的指示符。在您的字符串中有一个 % 符号,但您没有提供任何要插入的参数。所以它写作MISSING

既然你不想格式化任何东西(看起来),就用这个来代替:

cnt, err := fmt.Fprint(rs, jsonStr)

【讨论】:

  • @tehspinx,感谢您的回答,我替换了 Fprintf 函数以接受另一个参数 %s
猜你喜欢
  • 2011-10-24
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多