github.com/dorkamotorka/go/src@v0.0.0-20230614113921-187095f0e316/unicode/utf8/example_test.go (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package utf8_test 6 7 import ( 8 "fmt" 9 "unicode/utf8" 10 ) 11 12 func ExampleDecodeLastRune() { 13 b := []byte("Hello, 世界") 14 15 for len(b) > 0 { 16 r, size := utf8.DecodeLastRune(b) 17 fmt.Printf("%c %v\n", r, size) 18 19 b = b[:len(b)-size] 20 } 21 // Output: 22 // 界 3 23 // 世 3 24 // 1 25 // , 1 26 // o 1 27 // l 1 28 // l 1 29 // e 1 30 // H 1 31 } 32 33 func ExampleDecodeLastRuneInString() { 34 str := "Hello, 世界" 35 36 for len(str) > 0 { 37 r, size := utf8.DecodeLastRuneInString(str) 38 fmt.Printf("%c %v\n", r, size) 39 40 str = str[:len(str)-size] 41 } 42 // Output: 43 // 界 3 44 // 世 3 45 // 1 46 // , 1 47 // o 1 48 // l 1 49 // l 1 50 // e 1 51 // H 1 52 53 } 54 55 func ExampleDecodeRune() { 56 b := []byte("Hello, 世界") 57 58 for len(b) > 0 { 59 r, size := utf8.DecodeRune(b) 60 fmt.Printf("%c %v\n", r, size) 61 62 b = b[size:] 63 } 64 // Output: 65 // H 1 66 // e 1 67 // l 1 68 // l 1 69 // o 1 70 // , 1 71 // 1 72 // 世 3 73 // 界 3 74 } 75 76 func ExampleDecodeRuneInString() { 77 str := "Hello, 世界" 78 79 for len(str) > 0 { 80 r, size := utf8.DecodeRuneInString(str) 81 fmt.Printf("%c %v\n", r, size) 82 83 str = str[size:] 84 } 85 // Output: 86 // H 1 87 // e 1 88 // l 1 89 // l 1 90 // o 1 91 // , 1 92 // 1 93 // 世 3 94 // 界 3 95 } 96 97 func ExampleEncodeRune() { 98 r := '世' 99 buf := make([]byte, 3) 100 101 n := utf8.EncodeRune(buf, r) 102 103 fmt.Println(buf) 104 fmt.Println(n) 105 // Output: 106 // [228 184 150] 107 // 3 108 } 109 110 func ExampleEncodeRune_outOfRange() { 111 runes := []rune{ 112 // Less than 0, out of range. 113 -1, 114 // Greater than 0x10FFFF, out of range. 115 0x110000, 116 // The Unicode replacement character. 117 utf8.RuneError, 118 } 119 for i, c := range runes { 120 buf := make([]byte, 3) 121 size := utf8.EncodeRune(buf, c) 122 fmt.Printf("%d: %d %[2]s %d\n", i, buf, size) 123 } 124 // Output: 125 // 0: [239 191 189] � 3 126 // 1: [239 191 189] � 3 127 // 2: [239 191 189] � 3 128 } 129 130 func ExampleFullRune() { 131 buf := []byte{228, 184, 150} // 世 132 fmt.Println(utf8.FullRune(buf)) 133 fmt.Println(utf8.FullRune(buf[:2])) 134 // Output: 135 // true 136 // false 137 } 138 139 func ExampleFullRuneInString() { 140 str := "世" 141 fmt.Println(utf8.FullRuneInString(str)) 142 fmt.Println(utf8.FullRuneInString(str[:2])) 143 // Output: 144 // true 145 // false 146 } 147 148 func ExampleRuneCount() { 149 buf := []byte("Hello, 世界") 150 fmt.Println("bytes =", len(buf)) 151 fmt.Println("runes =", utf8.RuneCount(buf)) 152 // Output: 153 // bytes = 13 154 // runes = 9 155 } 156 157 func ExampleRuneCountInString() { 158 str := "Hello, 世界" 159 fmt.Println("bytes =", len(str)) 160 fmt.Println("runes =", utf8.RuneCountInString(str)) 161 // Output: 162 // bytes = 13 163 // runes = 9 164 } 165 166 func ExampleRuneLen() { 167 fmt.Println(utf8.RuneLen('a')) 168 fmt.Println(utf8.RuneLen('界')) 169 // Output: 170 // 1 171 // 3 172 } 173 174 func ExampleRuneStart() { 175 buf := []byte("a界") 176 fmt.Println(utf8.RuneStart(buf[0])) 177 fmt.Println(utf8.RuneStart(buf[1])) 178 fmt.Println(utf8.RuneStart(buf[2])) 179 // Output: 180 // true 181 // true 182 // false 183 } 184 185 func ExampleValid() { 186 valid := []byte("Hello, 世界") 187 invalid := []byte{0xff, 0xfe, 0xfd} 188 189 fmt.Println(utf8.Valid(valid)) 190 fmt.Println(utf8.Valid(invalid)) 191 // Output: 192 // true 193 // false 194 } 195 196 func ExampleValidRune() { 197 valid := 'a' 198 invalid := rune(0xfffffff) 199 200 fmt.Println(utf8.ValidRune(valid)) 201 fmt.Println(utf8.ValidRune(invalid)) 202 // Output: 203 // true 204 // false 205 } 206 207 func ExampleValidString() { 208 valid := "Hello, 世界" 209 invalid := string([]byte{0xff, 0xfe, 0xfd}) 210 211 fmt.Println(utf8.ValidString(valid)) 212 fmt.Println(utf8.ValidString(invalid)) 213 // Output: 214 // true 215 // false 216 } 217 218 func ExampleAppendRune() { 219 buf1 := utf8.AppendRune(nil, 0x10000) 220 buf2 := utf8.AppendRune([]byte("init"), 0x10000) 221 fmt.Println(string(buf1)) 222 fmt.Println(string(buf2)) 223 // Output: 224 // 𐀀 225 // init𐀀 226 }