
小编最近在研究Go语言,今天研究到Go的操作文件这里,在写入数据的时候发生了个异常:

文件里面的中文出现了乱码,小编发现了右下角的格式并非UTF-8格式,虽然意识到了这个问题,但是怎么解决却是一头雾水,先附上错误的源代码:
Go
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("E:/go/文件目录操作/create.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
if err != nil {
fmt.Println("写入文件时,open异常:", err.Error())
return
}
defer file.Close()
var data string
for i := 0; i < 10; i++ {
data += "golang高手" + string(i)
}
file.Write([]byte(data))
//file.WriteString(data)
fmt.Println("文件写入完成!!")
}
经过百度和AI查询也没有找到解决方法,经过仔细排查发现,问题在于我的字符串拼接这里,附上正确的拼接代码:
Go
package main
import (
"fmt"
"os"
"strconv"
)
func main() {
file, err := os.OpenFile("E:/go/文件目录操作/create.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
if err != nil {
fmt.Println("写入文件时,open异常:", err.Error())
return
}
defer file.Close()
var data string
for i := 0; i < 10; i++ {
data += "golang高手" + strconv.Itoa(i)
}
file.Write([]byte(data))
//file.WriteString(data)
fmt.Println("文件写入完成!!")
}
原因分析:
通过strconv
包将整数转换为字符串,本质是数字字符的ASCII/Unicode编码转换(十进制50对应字符),生成的是UTF-8编码的合法字符串
string
直接类型转换将整数2
视为Unicode码点(rune),生成的是码点值为2的控制字符\x02
(非可打印字符),写入文件时可能被识别为UTF-16LE或乱码
以上是小编的拙见,如有不同的见解和认知,欢迎留言评论