// IsSurrogate 判斷 r 是否為代理區(qū)字符
// 兩個(gè)代理區(qū)字符可以用來組合成一個(gè) utf16 編碼
func IsSurrogate(r rune) bool
// EncodeRune 將字符 r 編碼成 UTF-16 代理對
// r:要編碼的字符
// 如果 r < 0x10000 窝爪,則無需編碼,其 UTF-16 序列就是其自身
// r1:編碼后的 UTF-16 代理對的高位碼元
// r2:編碼后的 UTF-16 代理對的低位碼元
// 如果 r 不是有效的 Unicode 字符,或者是代理區(qū)字符蜻势,或者無需編碼
// 則返回 U+FFFD, U+FFFD
func EncodeRune(r rune) (r1, r2 rune)
// DecodeRune 將 UTF-16 代理對解碼成一個(gè) Unicode 字符
// r1:是 UTF-16 代理對的高位碼元
// r2:是 UTF-16 代理對的低位碼元
// 返回值為解碼后的 Unicode 字符
// 如果 r1 或 r2 不是有效的 UTF-16 代理區(qū)字符燃领,則返回 U+FFFD
func DecodeRune(r1, r2 rune) rune
// Decode 將 UTF-16 序列 s 解碼成 Unicode 字符序列并返回
func Decode(s []uint16) []rune
// Encode 將 s 編碼成 UTF-16 序列并返回
func Encode(s []rune) []uint16
// 示例
func main() {
fmt.Printf("%t, ", utf16.IsSurrogate(0xD400)) // false
fmt.Printf("%t, ", utf16.IsSurrogate(0xDC00)) // true
fmt.Printf("%t\n", utf16.IsSurrogate(0xDFFF)) // true
r1, r2 := utf16.EncodeRune('??')
fmt.Printf("%x, %x\n", r1, r2) // d840, dc3e
r := utf16.DecodeRune(0xD840, 0xDC3E)
fmt.Printf("%c\n", r) // d840, dc3e
u := []uint16{'不', '會', 0xD840, 0xDC3E}
s := utf16.Decode(u)
fmt.Printf("%c", s) // [不 會 ??]
}