防止Go的json.Marshal从强制字符串转换为有效的UTF-8 unicode?

时间:2015-03-04 14:35:03

标签: go

我尝试使用Go将一些JSON发布到服务器,其中特殊字符(如&ampandand)必须在我发送的JSON字符串中完好无损地存在。

http://play.golang.org/p/bPt9kl88-y

package main

import (
    "fmt"
    "encoding/json"
)

func main() {

    type TransactionStatement struct {
        Query      string                 
    }

    statement := &TransactionStatement{
        Query:       "my query with this & that",
    }
    data, _ := json.Marshal(statement)

    fmt.Printf("> %v", string(data))
}

Go json.Marshal正在转换某些字符,例如'&' unicode。这很棒:

  

字符串值编码为强制转换为有效UTF-8的JSON字符串,用Unicode替换符号替换无效字节。尖括号"<"和">"被转移到" \ u003c"和" \ u003e"防止某些浏览器误将JSON输出误解为HTML。 &符"&"也逃到了#34; \#34; \#34;出于同样的原因。   块引用

这可能听起来很荒谬,但我发送的JSON是使用RESTful端点进行数据库查询,其中此文字字符串将用于执行自由文本数据库查询 - 因此我无法使用unicode它按字面解释。

那么有什么方法可以阻止这种转换为unicode?或者我只需要在编组完成后撤消这些替换吗?

由于

2 个答案:

答案 0 :(得分:2)

我刚刚意识到在发布其他角色之后也会被编码为unicode,而且这些角色确实在工作。

答案 1 :(得分:0)