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)
}
以上打印:
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 关注
- 647 浏览
添加回答
举报