From 3efc7215cbf6c7842cba0f5ebe90f72f0b6de9e1 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 8 Mar 2022 09:51:29 -0500 Subject: [PATCH] fmt, strconv: document use of Unicode replacement character in %q Fixes #51526. Change-Id: I365a763454bd201f804df29f800416b1731b8ebc Reviewed-on: https://go-review.googlesource.com/c/go/+/390436 Trust: Russ Cox Run-TryBot: Russ Cox Reviewed-by: Rob Pike TryBot-Result: Gopher Robot --- src/fmt/doc.go | 4 ++++ src/strconv/quote.go | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/fmt/doc.go b/src/fmt/doc.go index f14a7a73e33..6b49deda870 100644 --- a/src/fmt/doc.go +++ b/src/fmt/doc.go @@ -110,6 +110,10 @@ For complex numbers, the width and precision apply to the two components independently and the result is parenthesized, so %f applied to 1.2+3.4i produces (1.200000+3.400000i). +When formatting a single integer code point or a rune string (type []rune) +with %q, invalid Unicode code points are changed to the Unicode replacement +character, U+FFFD, as in strconv.QuoteRune. + Other flags: + always print a sign for numeric values; guarantee ASCII-only output for %q (%+q) diff --git a/src/strconv/quote.go b/src/strconv/quote.go index d2814b92da7..9d20b75a58a 100644 --- a/src/strconv/quote.go +++ b/src/strconv/quote.go @@ -165,6 +165,8 @@ func AppendQuoteToGraphic(dst []byte, s string) []byte { // QuoteRune returns a single-quoted Go character literal representing the // rune. The returned string uses Go escape sequences (\t, \n, \xFF, \u0100) // for control characters and non-printable characters as defined by IsPrint. +// If r is not a valid Unicode code point, it is interpreted as the Unicode +// replacement character U+FFFD. func QuoteRune(r rune) string { return quoteRuneWith(r, '\'', false, false) } @@ -179,6 +181,8 @@ func AppendQuoteRune(dst []byte, r rune) []byte { // the rune. The returned string uses Go escape sequences (\t, \n, \xFF, // \u0100) for non-ASCII characters and non-printable characters as defined // by IsPrint. +// If r is not a valid Unicode code point, it is interpreted as the Unicode +// replacement character U+FFFD. func QuoteRuneToASCII(r rune) string { return quoteRuneWith(r, '\'', true, false) } @@ -193,6 +197,8 @@ func AppendQuoteRuneToASCII(dst []byte, r rune) []byte { // the rune. If the rune is not a Unicode graphic character, // as defined by IsGraphic, the returned string will use a Go escape sequence // (\t, \n, \xFF, \u0100). +// If r is not a valid Unicode code point, it is interpreted as the Unicode +// replacement character U+FFFD. func QuoteRuneToGraphic(r rune) string { return quoteRuneWith(r, '\'', false, true) }