在 Go 中,标准库假定所有文本文件都采用 UTF-8 编码。但是,对于以其他字符集编码的文件来说,情况可能并非如此。本文介绍了如何使用 golang.org/x/text/encoding 包在 Go 中读取非 UTF-8 文本文件。
golang.org/x/text/encoding 包提供了通用的接口可以与 UTF-8 相互转换的字符编码。例如,golang.org/x/text/encoding/simplifiedchinese 子包提供了 GB18030、GBK 和 HZ-GB2312 的编码器。
示例:读取 GBK 编码文件
package main import ( "bufio" "fmt" "log" "os" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" ) func main() { const filename = "example_GBK_file" // Read UTF-8 from a GBK encoded file f, err := os.Open(filename) if err != nil { log.Fatal(err) } r := transform.NewReader(f, simplifiedchinese.GBK.NewDecoder()) // Read converted UTF-8 from `r` as needed sc := bufio.NewScanner(r) for sc.Scan() { fmt.Printf("Read line: %s\n", sc.Bytes()) } if err := sc.Err(); err != nil { log.Fatal(err) } if err = f.Close(); err != nil { log.Fatal(err) } }
这个例子使用了一个transform.NewReader来包装一个os.File 对象并执行从 GBK 到 UTF-8 的即时解码。
附加说明:
以上是如何在Go中读取非UTF-8编码的文本文件?的详细内容。更多信息请关注PHP中文网其他相关文章!