为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
白衣染霜花 2023-03-07 11:36:01
如何在golangutf8中将字符串转换为ISO-8859-1曾尝试搜索,但只能通过其他方式找到转化,而我找到的少数解决方案均无效我需要使用特殊的丹麦字符转换字符串,例如æ,ø和åø=>ø 等
查看完整描述

1 回答

?
Cats萌萌

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

即表情符号已被剥离。


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 647 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信