1 回答

TA貢獻1805條經驗 獲得超9個贊
請記住,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)
}
以上打?。?/p>
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
即表情符號已被剝離。
- 1 回答
- 0 關注
- 697 瀏覽
添加回答
舉報