golang mysql 乱码_[golang]一个复杂的中文编码问题

本文介绍了在Golang中处理从UTF8到GBK编码,再从GBK编码转换为ISO-8859-1,以解决在拉丁1编码的MySQL数据库中正确存储和读取中文数据的问题。主要涉及转换函数Convert的实现,以及在处理编码问题时确保写和读一致性的重要性。
摘要由CSDN通过智能技术生成

今天在网上遇到一个问题,觉得挺有意思,就帮人解答了。

需求

在编码为Latin1的MySQL数据库中插入中文数据,由另一个系统将Latin1编码的字符串转码为GBK后作为短信内容发出。

简单版解答

import (

"golang.org/x/text/encoding/charmap"

"golang.org/x/text/encoding/simplifiedchinese"

)

func Convert(src string) (string, error) {

gbk, err := simplifiedchinese.GBK.NewEncoder().Bytes([]byte(src))

if err != nil {

return "", err

}

latin1, err := charmap.ISO8859_1.NewDecoder().Bytes(gbk)

if err != nil {

return "", err

}

return string(latin1), nil

}

解析

Latin1即ISO-8859-1,抄一段介绍 ,详见百度百科

因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值