import "code.google.com/p/go.text/encoding/unicode"
unicode包提供了UTF-16文本的编解码服务。
var ErrMissingBOM = errors.New("encoding: missing byte order mark")
ErrMissingBOM表示采用ExpectBOM策略解码输入的UTF-16文本时,没有在开始处找到字节序标记(BOM)。
type Endianness bool
Endianness是UTF-16的默认编码末端方向。
const ( // BigEndian即UTF-16BE BigEndian Endianness = false // LittleEndian即UTF-16LE LittleEndian Endianness = true)
type BOMPolicy bool
BOMPolicy是UTF-16编码针对BOM标志的策略。
const ( // IgnoreBOM表示忽略任何字节序标志 IgnoreBOM BOMPolicy = false // ExpectBOM表示期望输入以字节序标志开始 ExpectBOM BOMPolicy = true)
func UTF16(e Endianness, b BOMPolicy) encoding.Encoding
UTF16使用提供的默认字节序方向和字节序BOM策略返回一个UTF-16编解码器。
当解码UTF-16到UTF-8时,如果参数b为IgnoreBOM,则不管输入流起始处的BOM是U+FEFF还是U+FFFE,都不会影响用于解码的末端方向设置;相反,它们会被解码为标准的UTF-8编码"\xef\xbb\xbf"和"\xef\xbf\xbe"。如果参数p是ExpectBOM,则解码器会期望输入流的起始处有BOM,如果没有,解码器就会以错误值ErrMissingBOM 直接返回;起始处的BOM不会写入UTF-8文本中,相反,会根据BOM重设解码的末端方向;之后序列中的U+FEFF 或非法字符U+FFFE不会影响使用中的编码末端方向,而会当成普通字符解码并写入UTF-8文本。
当编码UTF-8到UTF-16时,如果参数p为ExpectBOM,会在文本开始出添加相应的BOM;否则不会插入BOM。要编码的UTF-8文本中不需要包含BOM。
没有所谓的'本地'末端方向的概念。如果UTF-16数据是在一个很大范围内使用、且保证确定而统一的编码末端方向,参数p可使用IgnoreBOM。否则,使用ExpectBOM,并总是在编解码时生成或者使用BOM。