mahonia
mahonia copied to clipboard
用utf8转成gbk再转回去 转不回去了
package main
import ( "fmt" "github.com/axgle/mahonia" )
func main() {
str :="你好"
fmt.Println("UTF-8 to GBK: ",ConvertToString(str,"utf8","gbk"))
// data :=ConvertToString(str,"utf8","gbk")
fmt.Println("GBK to UTF-8: ",ConvertToString(ConvertToString(str,"utf8","gbk"),"gbk","utf8"))
}
func ConvertToString(src string, srcCode string, tagCode string) string { srcCoder := mahonia.NewDecoder(srcCode) srcResult := srcCoder.ConvertString(src) tagCoder := mahonia.NewDecoder(tagCode) _, cdata, _ := tagCoder.Translate([]byte(srcResult), true) result := string(cdata) return result }
UTF-8 to GBK: 浣犲ソ GBK to UTF-8: 娴g姴銈�
既然是转换, 那你就应该使用Encoder, 把你的 ConverToString 修改一下就可以了:
func ConvertToString(src string, srcCode string, tagCode string) string {
srcCoder := convlib.NewDecoder(srcCode)
srcResult := srcCoder.ConvertString(src)
//fmt.Println("srcResult["+srcCode+"]=", src, " => ", srcResult)
tagCoder := convlib.NewEncoder(tagCode)
result := tagCoder.ConvertString(srcResult)
//fmt.Println("toResult["+tagCode+"]=", srcResult, " => ", result)
return result
}
修改后的结果为: srcResult[UTF-8]= 你好 => 你好 toResult[GBK]= 你好 => ���� UTF-8 to GBK: ���� srcResult[UTF-8]= 你好 => 你好 toResult[GBK]= 你好 => ���� srcResult[GBK]= ���� => 你好 toResult[UTF-8]= 你好 => 你好 GBK to UTF-8: 你好
PS:以上是在UTF-8 中打印,只有UTF8编码是正常,其他编码是乱的.
其实可以优化一下, 也就是 如果其中有一方是 UTF8 , 那么则不需要转换 ,反正 UTF8 转UTF8 是一样的。
如果srcCode desCode 都不是 UTF8 , 其实会使用UTF8 作为中间层,转换。
其实可以优化一下, 也就是 如果其中有一方是 UTF8 , 那么则不需要转换 ,反正 UTF8 转UTF8 是一样的。
如果srcCode desCode 都不是 UTF8 , 其实会使用UTF8 作为中间层,转换。
有现成的吗🙂