------------------------------------------------------------ // IsSurrogate 判斷 r 是否爲代理區字符 // 兩個代理區字符能夠用來組合成一個 utf16 編碼 func IsSurrogate(r rune) bool // EncodeRune 將字符 r 編碼成 UTF-16 代理對 // r:要編碼的字符 // 若是 r < 0x10000 ,則無需編碼,其 UTF-16 序列就是其自身 // r1:編碼後的 UTF-16 代理對的高位碼元 // r2:編碼後的 UTF-16 代理對的低位碼元 // 若是 r 不是有效的 Unicode 字符,或者是代理區字符,或者無需編碼 // 則返回 U+FFFD, U+FFFD func EncodeRune(r rune) (r1, r2 rune) // DecodeRune 將 UTF-16 代理對解碼成一個 Unicode 字符 // r1:是 UTF-16 代理對的高位碼元 // r2:是 UTF-16 代理對的低位碼元 // 返回值爲解碼後的 Unicode 字符 // 若是 r1 或 r2 不是有效的 UTF-16 代理區字符,則返回 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) // [不 會 𠁞] } ------------------------------------------------------------