summaryrefslogtreecommitdiff
path: root/src/unicode
diff options
context:
space:
mode:
authorAinar Garipov <gugl.zadolbal@gmail.com>2020-09-18 21:01:34 +0300
committerGiovanni Bajo <rasky@develer.com>2020-09-19 09:43:15 +0000
commita3868028ac8470d1ab7782614707bb90925e7fe3 (patch)
tree0c60e5a56cb1dea8719e14e7f50e7a0573193c57 /src/unicode
parent73eb24ccb6d8dd2cf9dd807acf69987a05e8d142 (diff)
downloadgo-git-a3868028ac8470d1ab7782614707bb90925e7fe3.tar.gz
unicode/utf8: document the handling of runes out of range in EncodeRune
Document the way EncodeRune currently handles runes which are out of range. Also add an example showing that behaviour. Change-Id: I0f8e7645ae053474ec319085a2bb6d7f73bc137c Reviewed-on: https://go-review.googlesource.com/c/go/+/255998 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Giovanni Bajo <rasky@develer.com> Trust: Giovanni Bajo <rasky@develer.com> Run-TryBot: Giovanni Bajo <rasky@develer.com> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/unicode')
-rw-r--r--src/unicode/utf8/example_test.go20
-rw-r--r--src/unicode/utf8/utf8.go1
2 files changed, 21 insertions, 0 deletions
diff --git a/src/unicode/utf8/example_test.go b/src/unicode/utf8/example_test.go
index 7b3e7ac742..5cd931d242 100644
--- a/src/unicode/utf8/example_test.go
+++ b/src/unicode/utf8/example_test.go
@@ -107,6 +107,26 @@ func ExampleEncodeRune() {
// 3
}
+func ExampleEncodeRune_outOfRange() {
+ runes := []rune{
+ // Less than 0, out of range.
+ -1,
+ // Greater than 0x10FFFF, out of range.
+ 0x110000,
+ // The Unicode replacement character.
+ utf8.RuneError,
+ }
+ for i, c := range runes {
+ buf := make([]byte, 3)
+ size := utf8.EncodeRune(buf, c)
+ fmt.Printf("%d: %d %[2]s %d\n", i, buf, size)
+ }
+ // Output:
+ // 0: [239 191 189] � 3
+ // 1: [239 191 189] � 3
+ // 2: [239 191 189] � 3
+}
+
func ExampleFullRune() {
buf := []byte{228, 184, 150} // 世
fmt.Println(utf8.FullRune(buf))
diff --git a/src/unicode/utf8/utf8.go b/src/unicode/utf8/utf8.go
index ef0d740960..557e8a7770 100644
--- a/src/unicode/utf8/utf8.go
+++ b/src/unicode/utf8/utf8.go
@@ -337,6 +337,7 @@ func RuneLen(r rune) int {
}
// EncodeRune writes into p (which must be large enough) the UTF-8 encoding of the rune.
+// If the rune is out of range, it writes the encoding of RuneError.
// It returns the number of bytes written.
func EncodeRune(p []byte, r rune) int {
// Negative values are erroneous. Making it unsigned addresses the problem.