我正在尝试读取包含如下名称的纯文本文件:“CASTAÑEDA”
代码基本上是这样的:
file, err := os.Open("C:/Files/file.txt")
defer file.Close()
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
然后,当读取“CASTAÑEDA”时,它会打印“CASTA�EDA”
在使用 bufio 阅读时,有什么方法可以处理这些字符吗?
谢谢。
最佳答案
您的文件很可能不是 UTF-8。因此(go 期望所有字符串都是 UTF-8)你的控制台输出看起来很乱。我建议在你的情况下使用包 golang.org/x/text/encoding/charmap
和 golang.org/x/text/transform
来转换文件的数据为UTF-8。正如我所推测的那样,查看您的文件路径,您使用的是 Windows。因此,您的字符编码可能是 Windows1252
(如果您使用 notepad.exe 等对其进行了编辑)。
尝试这样的事情:
package main
import (
"bufio"
"fmt"
"log"
"os"
"golang.org/x/text/encoding/charmap"
"golang.org/x/text/transform"
)
func main() {
file, err := os.Open("C:/temp/file.txt")
defer file.Close()
if err != nil {
log.Fatal(err)
}
dec := transform.NewReader(file, charmap.Windows1252.NewDecoder()) <- insert your enconding here
scanner := bufio.NewScanner(dec)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
您可以在 golang.org/x/text/encoding/charmap
包中找到更多编码,您可以根据自己的喜好将其插入到我的示例中。
关于unicode - 在 Go 中使用 bufio 扫描器读取 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29686673/