如何將utf8字串轉換為ISO-8859-1golang
已嘗試搜索但只能以其他方式找到轉化,而我發現的少數解決方案不起作用
我需要用特殊的丹麥字符轉換字串,比如?,?和?
??=>?
等等。
uj5u.com熱心網友回復:
請記住,ISO-8859-1與 Unicode 相比,它僅支持一小部分字符。如果您確定您的UTF-8編碼字串僅包含 覆寫的字符ISO-8859-1,則可以使用以下代碼。
package main
import (
"fmt"
"golang.org/x/text/encoding/charmap"
)
func main() {
str := "R?v"
encoder := charmap.ISO8859_1.NewEncoder()
out, err := encoder.Bytes([]byte(str))
if err != nil {
panic(err)
}
fmt.Printf("%x\n", out)
}
以上列印:
52e476
因此0x52, 0xE4, 0x76, 根據https://en.wikipedia.org/wiki/ISO/IEC_8859-1看起來是正確的- 特別是第二個字符值得注意,因為它將被編碼為0xC3, 0xA4in UTF-8。
如果字串包含不受支持的字符,例如我們更改str為 be "R?v??v",則將回傳錯誤encoder.Bytes([]byte(str)):
panic: encoding: rune not supported by encoding.
goroutine 1 [running]:
main.main()
/Users/nj/Dev/scratch/main.go:15 0x109
如果您希望通過接受不可轉換字符的丟失來解決這個問題,一個簡單的解決方案可能是利用EncodeRune,它回傳一個布林值以指示符文是否在 Charmap 的曲目中。
package main
import (
"fmt"
"golang.org/x/text/encoding/charmap"
)
func main() {
str := "R?v??v"
out := make([]byte, 0)
for _, r := range str {
if e, ok := charmap.ISO8859_1.EncodeRune(r); ok {
out = append(out, e)
}
}
fmt.Printf("%x\n", out)
}
以上印刷品
52e47676
即表情符號已被剝離。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/520351.html
標籤:去UTF-8
