Я могу прочитать файл в массиве байтов
но когда я конвертирую его в строку
он обрабатывает 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]
S c r я p t я n f o]
Update:
После того, как я проверил два примера, я понял, что сейчас представляет собой точную проблему.
В окнах, если я добавлю разрыв строки (CR + LF) в конце строки, CR будет считаться в строке. Поскольку функция readline не может правильно обрабатывать юникод ([OD OA] = ok, [OD 00 OA 00] = не нормально).
Если функция readline может распознавать unicode, она должна понимать [OD 00 OA 00] и возвращать [] uint16, а не [] байты.
Итак, я думаю, что я не должен использовать bufio.NewReader, поскольку он не умеет читать utf16, я не вижу bufio.NewReader.ReadLine может принимать флаг параметра как указание, чтобы текст чтения был utf8, utf16le/be или utf32, Есть ли функция readline для текста в кодировке unicode в библиотеке go?