记录GoLang创建文件并写入文件的中文乱码错误!

小编最近在研究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或乱码

以上是小编的拙见,如有不同的见解和认知,欢迎留言评论

相关推荐
shenlongproxy28 分钟前
代理IP故障演练怎么做:注入怎么分档、恢复怎么判定
后端
知识搬运临时工28 分钟前
Kafka 发 1 GiB 数据,用户态 CPU 只花 0.016 秒,总耗时反而慢了 11%
后端·kafka
wt952728 分钟前
VMware 虚拟机磁盘扩容实战文档(Ubuntu 22.04 + LVM)
linux·后端
Dovis(誓平步青云)29 分钟前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
王中阳Go29 分钟前
预算给够了,时间花错了地方:三跳链路给了 27 秒,实际只用掉 9 秒
人工智能·后端·性能优化
做科研的周师兄31 分钟前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
用户3949950846334 分钟前
文件变了,inotify 为什么没反应
后端
陈随易39 分钟前
神级 Skill,让 AI 用 HTML 代替 Markdown 回复
前端·后端·程序员
Gopher_HBo39 分钟前
go tool trace 使用指南(Go 1.24)
后端
一条Go40 分钟前
能力套餐:菜单、权限、开通范围怎么拆成三层而不打架
后端·github·saas