douyi02577 2014-07-03 14:02
浏览 138
已采纳

GoLang-使用ISO-8859-1字符集进行持久化

I'm developing a project where we need to persist our information in a legacy database that has ISO-8859-1 tables. So before writing something to the database I need to convert it from UTF-8 to ISO-8859-1, and every time I retrieve it from the database, I need to convert it back to UTF-8.

I was trying to use the library code.google.com/p/go-charset/ as the following for each text field that I need to persist.

import (
  "bytes"
  "code.google.com/p/go-charset/charset"
  _ "code.google.com/p/go-charset/data"
  "fmt"
  "io/ioutil"
  "strings"
)

func toISO88591(utf8 string) string {
    buf := new(bytes.Buffer)

    w, err := charset.NewWriter("latin1", buf)
    if err != nil {
        panic(err)
    }
    defer w.Close()

    fmt.Fprintf(w, utf8)
    return buf.String()
}

func fromISO88591(iso88591 string) string {
    r, err := charset.NewReader("latin1", strings.NewReader(iso88591))
    if err != nil {
        panic(err)
    }

    buf, err := ioutil.ReadAll(r)
    if err != nil {
        panic(err)
    }

    return string(buf)
}

The problem is that the data is still persisted in UTF-8 even if I use the function toISO88591. I am doing something wrong in this conversion?

My database is a MySQL, and I'm using the github.com/go-sql-driver/mysql driver with the following connection parameters:

<user>:<password>@tcp(<host>:<port>)/<database>?collation=latin1_general_ci

Best regards!

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥30 关于#网络安全#的问题:非对称加密验证
      • ¥20 关于线性代数里施密特正交化和QR分解的疑问
      • ¥15 matlab超类包含解析错误
      • ¥15 python拖拽文件问题
      • ¥15 执行import paddle代码出现错误如何解决?
      • ¥15 hisat2align exited with value 137
      • ¥15 寻找大学生合作开发软件(Delphi)
      • ¥30 AndroidBench&eMMC内存测试速度&Android
      • ¥15 W10 文件共享失败 怎么解决
      • ¥20 b站私信完整导出的方法