unicode - 在 Go 中使用 bufio 扫描器读取 unicode 字符

标签 unicode go

我正在尝试读取包含如下名称的纯文本文件:“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/charmapgolang.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/

相关文章:

c++ - 将 Unicode UTF-32 文件读入 wstring

mysql - Rails 上的 UTF8 MySQL 问题 - utf8_general_ci 的编码问题

docker - 在 Golang 中使用 docker 将敏感数据作为参数传递

go - VS 代码不格式化 GO 代码

go - 为什么我从我的 io.PipeReader 中得到一个 EOF?

golang 同步/原子包?

php - 用于检测连续数字的正则表达式 - 不适用于非英语输入

python - 在 Python 正则表达式的 unicode 文本中使用的字边界

c# - 在 C# 控制台应用程序中显示阿拉伯字符

go - slice slice 引用