diff --git a/decode.go b/decode.go index fa359d0..49445ed 100644 --- a/decode.go +++ b/decode.go @@ -1266,6 +1266,17 @@ func unquoteBytes(s []byte) (t []byte, ok bool) { b[w] = '\t' r++ w++ + case 'x': + if (r+2) < len(s) { + n, err := strconv.ParseUint(string(s[r+1:r+3]), 16, 8) + if err != nil { + return + } else { + b[w] = byte(n) + r += 3 + w++ + } + } case 'u': r-- rr := getu4(s[r:]) diff --git a/scanner.go b/scanner.go index 283459a..4040d16 100644 --- a/scanner.go +++ b/scanner.go @@ -483,7 +483,7 @@ func stateInStringSingle(s *scanner, c byte) int { func stateInStringEsc(resume func(s *scanner, c byte) int) func(s *scanner, c byte) int { return func(s *scanner, c byte) int { switch c { - case 'b', 'f', 'n', 'r', 't', '\\', '/', '"', '\'', '\n': + case 'b', 'f', 'n', 'r', 't', '\\', '/', '"', '\'', '\n', 'x': s.step = resume return scanContinue case 'u':