我正在通過IMAP下載郵件。接下來,我將分析後的消息添加到MongoDB中。我遇到了一個問題,因爲MongoDB僅支持UTF 8.我想將任何編碼轉換爲UTF 8。代碼是各種各樣的。我怎樣才能將每個字符串轉換爲UTF 8?將任何編碼轉換爲UTF 8中的內容
我知道,我可以轉換爲二進制,但我必須有正常的文本,因爲我必須搜索數據庫中的短語。除非,我可以用二進制文件搜索普通文本嗎?如果是,請給我代碼轉換任何字符串爲二進制,請。
請幫忙。
我正在通過IMAP下載郵件。接下來,我將分析後的消息添加到MongoDB中。我遇到了一個問題,因爲MongoDB僅支持UTF 8.我想將任何編碼轉換爲UTF 8。代碼是各種各樣的。我怎樣才能將每個字符串轉換爲UTF 8?將任何編碼轉換爲UTF 8中的內容
我知道,我可以轉換爲二進制,但我必須有正常的文本,因爲我必須搜索數據庫中的短語。除非,我可以用二進制文件搜索普通文本嗎?如果是,請給我代碼轉換任何字符串爲二進制,請。
請幫忙。
我使用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é
現在,在我的情況下,我知道字符集,因爲它來自網頁,我讀了標題/元標記。如果您需要通過啓發式自動檢測字符集,你需要爲另一個庫,比如這一個: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)
}
我發現了一個更好的包,它使用iconv。用法很簡單,它在文檔中有描述。例如:
output,_ := iconv.ConvertString("Hello World!", "windows-1252", "utf-8")
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)
}
爲什麼這比https://godoc.org/golang.org/x/net/html/charset更好? – 2017-05-01 01:21:17
兩年前。也許這個軟件包現在好多了。 – JakubKubera 2017-05-02 07:39:37