如何在golang中将utf16文本文件读取为字符串?

我可以将文件读取到字节数组


但是当我将它转换为字符串时


它将 utf16 字节视为 ascii


如何正确转换?


package main


import ("fmt"

"os"

"bufio"

)


func main(){

    // read whole the file

    f, err := os.Open("test.txt")

    if err != nil {

        fmt.Printf("error opening file: %v\n",err)

        os.Exit(1)

    }

    r := bufio.NewReader(f)

    var s,b,e = r.ReadLine()

    if e==nil{

        fmt.Println(b)

        fmt.Println(s)

        fmt.Println(string(s))

    }

}

输出:


错误的


[255 254 91 0 83 0 99 0 114 0 105 0 112 0 116 0 32 0 73 0 110 0 102 0 111 0 93 0 13 0]


脚本信息]


更新:


在我测试了这两个示例之后,我现在明白了确切的问题是什么。


在windows中,如果我在行尾添加换行符(CR+LF),CR将在行中读取。因为 readline 函数无法正确处理 unicode([OD OA]=ok,[OD 00 OA 00]=not ok)。


如果 readline 函数可以识别 unicode,它应该理解 [OD 00 OA 00] 并返回 []uint16 而不是 []bytes。


所以我认为我不应该使用 bufio.NewReader 因为它无法读取 utf16,我没有看到 bufio.NewReader.ReadLine 可以接受参数作为标志来指示读取文本是 utf8、utf16le/be 或 utf32。go库中是否有unicode文本的readline函数?


FFIVE
浏览 350回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go