一尘不染

如何在http响应正文中返回编码的字符串?

go

将编码的字符串添加到http共振似乎将某些字符替换为!F(MISSING)。如何预防?

输出:

{“ encodedText”:“ M6c8RqL61nMFy%!F(MISSING)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))
}

阅读 291

收藏
2020-07-02

共1个答案

一尘不染

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

fmt.Fprintf(w, string(response))

Fprintf尝试格式化动词“%2F”的自变量。没有参数,因此Fprintf为动词打印“%!F(MISSING)”。

解决方法是不要将输出用作格式字符串。由于写入响应时不需要任何格式,因此将最后一行更改为:

w.Write(response)
2020-07-02