github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/mahonia/utf8.go (about) 1 package mahonia 2 3 import "unicode/utf8" 4 5 func init() { 6 RegisterCharset(&Charset{ 7 Name: "UTF-8", 8 NewDecoder: func() Decoder { return decodeUTF8Rune }, 9 NewEncoder: func() Encoder { return encodeUTF8Rune }, 10 }) 11 } 12 13 func decodeUTF8Rune(p []byte) (c rune, size int, status Status) { 14 if len(p) == 0 { 15 status = NO_ROOM 16 return 17 } 18 19 if p[0] < 128 { 20 return rune(p[0]), 1, SUCCESS 21 } 22 23 c, size = utf8.DecodeRune(p) 24 25 if c == 0xfffd { 26 if utf8.FullRune(p) { 27 status = INVALID_CHAR 28 return 29 } 30 31 return 0, 0, NO_ROOM 32 } 33 34 status = SUCCESS 35 return 36 } 37 38 func encodeUTF8Rune(p []byte, c rune) (size int, status Status) { 39 size = utf8.RuneLen(c) 40 if size > len(p) { 41 return 0, NO_ROOM 42 } 43 44 return utf8.EncodeRune(p, c), SUCCESS 45 }