我正在通过 IMAP 下载邮件。接下来,我将已解析的消息添加到 MongoDB 中。我有一个问题,因为 MongoDB 仅支持 UTF 8。我想将任何编码转换为 UTF 8。代码多种多样。如何将每个字符串转换为 UTF 8?
我知道,我可以转换为二进制,但我必须有普通文本,因为我必须在数据库中搜索短语。除非,我可以用二进制搜索普通文本吗?
最佳答案
我正在使用 go-charset
项目来执行此操作:https://code.google.com/p/go-charset/
非常简单,您从字符集创建一个阅读器,它会自动转换为 utf-8。来自图书馆的例子:
r, err := charset.NewReader(strings.NewReader("\xa35 for Pepp\xe9"), "latin1")
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é
现在,在我的例子中,我知道字符集,因为它来自网页,并且我阅读了 header /元标记。如果您需要通过启发式自动检测字符集,您将需要另一个库,例如这个库: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)
}
关于mongodb - 在 Go 中将任何编码转换为 UTF 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297328/