1
0
mirror of https://github.com/golang/go synced 2024-11-23 11:20:05 -07:00

encoding/json: document and test use of unicode.ReplacementChar

Fixes #4783.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/7314099
This commit is contained in:
Russ Cox 2013-02-14 14:56:01 -05:00
parent 31072e41f4
commit 30359a55c2
2 changed files with 42 additions and 0 deletions

View File

@ -55,6 +55,11 @@ import (
// If no more serious errors are encountered, Unmarshal returns
// an UnmarshalTypeError describing the earliest such error.
//
// When unmarshaling quoted strings, invalid UTF-8 or
// invalid UTF-16 surrogate pairs are not treated as an error.
// Instead, they are replaced by the Unicode replacement
// character U+FFFD.
//
func Unmarshal(data []byte, v interface{}) error {
// Check for well-formedness.
// Avoids filling out half a data structure

View File

@ -330,6 +330,43 @@ var unmarshalTests = []unmarshalTest{
ptr: new(S10),
out: S10{S13: S13{S8: S8{S9: S9{Y: 2}}}},
},
// invalid UTF-8 is coerced to valid UTF-8.
{
in: "\"hello\xffworld\"",
ptr: new(string),
out: "hello\ufffdworld",
},
{
in: "\"hello\xc2\xc2world\"",
ptr: new(string),
out: "hello\ufffd\ufffdworld",
},
{
in: "\"hello\xc2\xffworld\"",
ptr: new(string),
out: "hello\ufffd\ufffdworld",
},
{
in: "\"hello\\ud800world\"",
ptr: new(string),
out: "hello\ufffdworld",
},
{
in: "\"hello\\ud800\\ud800world\"",
ptr: new(string),
out: "hello\ufffd\ufffdworld",
},
{
in: "\"hello\\ud800\\ud800world\"",
ptr: new(string),
out: "hello\ufffd\ufffdworld",
},
{
in: "\"hello\xed\xa0\x80\xed\xb0\x80world\"",
ptr: new(string),
out: "hello\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdworld",
},
}
func TestMarshal(t *testing.T) {