golang 字串編碼轉換 gbk轉utf8

2021-08-15 12:00:18 字數 1568 閱讀 7134

問題描述:

需要調取乙個第三方的介面,介面返回的內容的編碼格式是gbk的,但是golang內建只認utf8,所以需要將gbk的字串轉換為utf8,才能進行後續的資料處理。

問題處理:

引入開源包 go get github.com/axgle/mahonia

此包的開源協議是bsd,所以可以放心的引用和使用

mahonia原始碼解讀:

// convertstring converts a string from d's encoding to utf-8.

func (d decoder) convertstring(s string) string

if status == no_room

bytes = bytes[size:]

runes[destpos] = c

destpos++

}return

string(runes[:destpos])

}

本以為呼叫上面這個函式就可以完成轉換,結果發現返回的字串的中文部分依舊是亂碼。網上查閱資料後,發現還需要呼叫乙個translate函式。

// translate enables a decoder to implement go-charset's translator inte***ce.

func (d decoder) translate(data byte, eof bool) (n int, cdata byte, err error)

rune =0xfffd

n = len(data)

default:

n += size}if

rune

<128

cdata[destpos] = byte(rune)

destpos++

} else

destpos += utf8.encoderune(cdata[destpos:], rune)}}

return n, cdata[:destpos], nil

}

內部的編碼轉換**就不分析了,看了下沒怎麼看明白。。。就當一回拿來主義,看一下函式的入參和返回值,直接呼叫了。發現返回值有三個引數,n應該是字串的容量或者長度,err我發現不管怎樣都是返回nil,所以這兩個引數對我來說我並不關心,只需要拿到第二個返回引數byte就行了。

於是,封裝成轉換函式如下

//src為要轉換的字串,srccode為待轉換的編碼格式,targetcode為要轉換的編碼格式

func converttobyte(src string, srccode string, targetcode string) byte

使用

response = util.converttobyte(string(response), "gbk", "utf8")

err = json.unmarshal(response, &result)

iferr != nil

return result,nil

大功告成

php字串編碼轉換

使用舉例 1 把 gbk 編碼字串轉換成 utf 8 編碼字串 view plaincopy toclipboardprint?header content type text html charset utf 8 echomb convert encoding 你是我的好朋友 utf 8 gbk ...

java 字串編碼轉換

public class changecharset 將字元編碼轉換成iso 8859 1碼 public static string toiso 8859 1 string str throws unsupportedencodingexception 將字元編碼轉換成utf 8碼 public ...

icu 字串編碼探測及字串編碼轉換例項

編譯 g o x x.cpp licuuc licui18n 請大家確認是否安裝icu庫 include include include include include define buf max 4096 data,傳入引數,需要探測的字串 len,傳入引數,探測字串長度 detected 傳出...