我正在通过IMAP下载邮件。接下来我将解析的消息添加到MongoDB中。我有一个问题,因为MongoDB只支持UTF 8.我想将任何编码转换为UTF 8.代码是多种多样的。如何将每个字符串转换为UTF 8?
我知道,我可以转换为二进制文件,但我必须有正常的文本,因为我必须在数据库中搜索短语。除非,我能用二进制搜索普通文本吗?如果是,请给我代码将任何字符串转换为二进制,请。
请帮忙。
答案 0 :(得分:2)
我正在使用go-charset
项目执行此操作:https://code.google.com/p/go-charset/
这非常简单,您可以从字符集创建一个阅读器,它会自动转换为utf-8。来自图书馆的例子:
r, err := charset.NewReader("latin1", strings.NewReader("\xa35 for Pepp\xe9"))
if err != nil {
log.Fatal(err)
}
result, err := ioutil.ReadAll(r)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", result) //outputs £5 for Peppé
现在,在我的情况下,我知道charset,因为它来自网页,我读取了header / meta标签。如果您需要通过启发式方法自动检测字符集,则需要另外一个库,例如:https://github.com/saintfish/chardet
我没有使用它,但它看起来也很简单:
detector := chardet.NewTextDetector()
result, err := detector.DetectBest(some_text)
if err == nil {
fmt.Printf(
"Detected charset is %s, language is %s",
result.Charset,
result.Language)
}
答案 1 :(得分:1)
charset.NewReader
中的 golang.org/x/net/html/charset
无法处理编码gb2312
。 charset.NewReaderLabel
可以处理它。
import (
"io/ioutil"
"golang.org/x/net/html/charset"
)
func convrtToUTF8(str string, origEncoding string) string {
strBytes := []byte(str)
byteReader := bytes.NewReader(strBytes)
reader, _ := charset.NewReaderLabel(origEncoding, byteReader)
strBytes, _ = ioutil.ReadAll(reader)
return string(strBytes)
}
答案 2 :(得分:0)
我找到了一个更好的包,它使用了iconv。用法很简单,文档中对此进行了描述。例如:
output,_ := iconv.ConvertString("Hello World!", "windows-1252", "utf-8")
答案 3 :(得分:0)
2020年,我发现https://pkg.go.dev/mod/golang.org/x/text对我来说很好。
<div class="wrapper">
<div class="element">
Element
</div>
<div class="results"></div>
<div class="buttons">
<button class="clone">clone</button>
<button class="remove">remove</button>
</div>
</div>