猿问

将 utf8 字符串转换为 ISO-8859-1

如何在golangutf8中将字符串转换为ISO-8859-1

曾尝试搜索,但只能通过其他方式找到转化,而我找到的少数解决方案均无效

我需要使用特殊的丹麦字符转换字符串,例如æ,øå

ø=>ø 等


白衣染霜花
浏览 648回答 1
1回答

Cats萌萌

请记住,ISO-8859-1与 Unicode 相比,它只支持一小部分字符。如果您确定您的UTF-8编码字符串仅包含 覆盖的字符ISO-8859-1,则可以使用以下代码。package mainimport (    "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 mainimport (    "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即表情符号已被剥离。
随时随地看视频慕课网APP

相关分类

Go
我要回答