utf8包的使用问题

gs272 · 2013-04-14 13:59:15 · 12576 次点击

明白了,感谢!

#2
更多评论
polaris
社区,需要你我一同完善!

这两个函数是针对单个rune和[]byte之间的转换。

utf8编码时,一个字符可能需要1、2、3或4个字节表示;在go中,一个utf8字符用rune类型表示;所以,这里的Encode和Decode是针对一个rune到[]byte的转换。

如下代码示例:

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    r := '中'
    p := make([]byte, 3)
    n := utf8.EncodeRune(p, r)
    fmt.Printf("bytes: %v, nums: %d\n", p, n)

    newRune, n := utf8.DecodeRune(p)
    fmt.Printf("rune: %c, nums: %d\n", newRune, n)
}

输出:

  • bytes: [228 184 173], nums: 3
  • rune: 中, nums: 3

至于说怎么实现你要求的功能,代码如下:

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    readbuf, _ := ioutil.ReadFile("test.txt")
    str := string(readbuf)
    for _, word := range str {
        fmt.Printf("%c\t", word)
    }
}

不过,如果文件不是utf8编码,这样读出来会乱码。这个时候需要进行编码转换,可以看看:Go中进行字符集转换

题外话,如果文件很大,最好别这么一次性读取内容。

#1