------------------------------------------------------------

// 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) // [不 会 𠀾]
}

------------------------------------------------------------



posted on 2013-08-21 10:11  GoLove  阅读(1961)  评论(0编辑  收藏  举报