在go中读取US-ASCII文件

时间:2014-10-30 15:18:51

标签: go

目前我尝试将一个us-ascii文件读入golang,但每次我这样做时,每个特殊标志,如ÄÖÜß都被替换为?或者在带有特殊标志的数据库上?。

我能做些什么来阻止它吗?

以下是我阅读文件的方式:

file, err := os.Open(path)
if err != nil {
    return err
}
var lines []string
r := bufio.NewReader(file)
for {
    line, err := r.ReadBytes('\n')
    if err != nil {
        break
    }
    lines = append(lines, string(line))
}
fmt.Println(strings.Join(lines, ""))
index.Content = strings.Join(lines, "")

1 个答案:

答案 0 :(得分:6)

由于US-ASCII中不存在字母ÄÖÜ,我会做出有根据的猜测,你实际上正在处理Latin-1(ISO-8859-1)编码。

从Latin-1转换可以这样做:

runes := make([]rune, len(line))
for i, b := range line {
    runes[i] = rune(b)
}
lines = append(lines, string(runes))

修改

该示例未进行优化,但它显示了如何将Latin-1字节存储在rune中,因为Latin-1的值直接对应于Unicode代码点。然后,在将[]rune转换为string时,将实际编码为UTF-8。