我可以将文件读取到字节数组
但是当我将它转换为字符串时
它将 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函数?
相关分类