golang unicode/norm 迭代器的最后一个符文未被读取

我正在使用该golang.org/x/text/unicode/norm包在[]byte. 我选择了这种方法,因为我需要检查每个符文并维护有关符文序列的信息。最后一次调用iter.Next()不读取最后一个符文。它在最后一个符文上读取 0 个字节。


这是代码:


package main


import (

  "fmt"

  "unicode/utf8"


  "golang.org/x/text/unicode/norm"

)


func main() {

  var (

    n   int

    r   rune

    it  norm.Iter

    out []byte

  )

  in := []byte(`test`)

  fmt.Printf("%s\n", in)

  fmt.Println(in)

  it.Init(norm.NFD, in)

  for !it.Done() {

    ruf := it.Next()

    r, n = utf8.DecodeRune(ruf)

    fmt.Printf("bytes read: %d. val: %q\n", n, r)

    buf := make([]byte, utf8.RuneLen(r))

    utf8.EncodeRune(buf, r)

    out = norm.NFC.Append(out, buf...)

  }

  fmt.Printf("%s\n", out)

  fmt.Println(out)

}

这会产生以下输出:


test

[116 101 115 116]

bytes read: 1. val: 't'

bytes read: 1. val: 'e'

bytes read: 1. val: 's'

bytes read: 0. val: '�'

tes�

[116 101 115 239 191 189]


泛舟湖上清波郎朗
浏览 234回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go