go解决使用oci8读取字符集为GBK的oracle的中文乱码问题

本文介绍了在Go中如何处理从GBK字符集的Oracle数据库读取中文数据时出现的乱码问题。通过引入github.com/axgle/mahonia和github.com/djimenez/iconv-go两个包,转换字符编码,实现了从GBK到UTF-8的正确转换。示例代码展示了在查询和处理数据过程中的编码转换步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go解决使用oci8读取字符集为GBK的oracle的中文乱码问题 - 尼古拉斯胖狗 - 博客园

因为go编程中需要的编码字符集是UTF-8,所以在读取字符集为GBK的Oracle中文数据时显示乱码,此时我们需要用到"github.com/axgle/mahonia" "github.com/djimenez/iconv-go" 两个包来解决,话不多说上代码:

//os.Setenv("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.AL32UTF8")
//os.Setenv("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
conf := tools.DecodeConfig(filePath)
fmt.Println(conf.Oracle)
err := conf.Oracle.InitDB()
if err != nil {
fmt.Println("define")
}
DB,_ := conf.Oracle.NewConn()
user := new(User)
sql := "select * from "user""
rows, _ := DB.Query(sql)
if err := recover(); err != nil {
fmt.Println(err) // 这里的err其实就是panic传入的内容
return
}
defer rows.Close()
//enc := mahonia.NewDecoder("UTF-8")
enc := mahonia.NewEncoder("UTF-8")
for rows.Next() {
if err = rows.Scan(&user.Id,&user.Name,&user.Age); err != nil {
fmt.Println(err)
return
}
//user.Name, _ = iconv.ConvertString(user.Name, "utf-8", "gb2312")
user.Name, _ = iconv.ConvertString(user.Name, "gb2312", "utf-8")
user.Name = enc.ConvertString(user.Name)
fmt.Println(user)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值