2014-10-16 131 views
0

将一个编码的字符串添加到http反应中似乎用!F(MISSING)替换某些字符。那是如何被阻止的?如何返回http响应正文中的编码字符串?

输出:

{ “encodedText”: “M6c8RqL61nMFy%F(丢失)hQmciSYrh9ZXgVFVjO”}

代码:

package main 

import (
    "encoding/json" 
    "fmt" 
    "net/http" 
    "net/url" 
) 

type EncodeResult struct { 
    EncodedText string `json:"encodedText"` 
} 

func main() { 

    http.HandleFunc("/encodedString", encodedString) 
    _ = http.ListenAndServe(":8080", nil) 
} 

func encodedString(w http.ResponseWriter, r *http.Request) { 

    inputString := "M6c8RqL61nMFy/hQmciSYrh9ZXgVFVjO" 
    er := EncodeResult{url.QueryEscape(inputString)} 
    response, _ := json.Marshal(er) 

    w.Header().Set("Content-Type", "application/json") 
    fmt.Fprintf(w, string(response)) 
} 
+0

谢谢查理,我看到了问题。任何修复建议? :) – 2014-10-17 14:44:21

回答

0

您正在使用转义值 “M6c8RqL61nMFy%2FhQmciSYrh9ZXgVFVjO” 作为此行的格式字符串:

fmt.Fprintf(w, string(response)) 

fprintf中试图格式化为动词的参数“%2F ”。没有参数,所以Fprintf为动词输出“%!F(MISSING)”。

解决的办法是不使用输出作为格式字符串。因为在写入响应时不需要任何格式,所以请将最后一行更改为:

w.Write(response)    
+0

修复它。谢谢查理。 :) – 2014-10-17 15:04:53

1

这似乎是正常逃避它,你能贴一些代码?

http://play.golang.org/p/rUEGn-KlTX

package main 

import (
    "fmt" 
    "net/url" 
) 

func main() { 

    escape := url.QueryEscape("M6c8RqL61nMFy/hQmciSYrh9ZXgVFVjO") 

    fmt.Println(escape) 
} 
+0

感谢Pram指出这个问题不是与url.QueryEscape – 2014-10-17 14:47:26