为什么 Go 在附加到字符串时将字节解释为 Unicode 代码点?

问题描述 投票:0回答:1

我需要创建一个由对应于最多 255 的整数的单个字节组成的字符串。该字符串不是有效的 Unicode 是可以接受的。

代码:

import (
    "fmt"
    "strings"
)

func main() {
    n := 255

    s := ""
    s += string(byte(n))
    fmt.Printf("Method 1: %x\n", s)

    sb := strings.Builder{}
    sb.WriteByte(byte(n))
    fmt.Printf("Method 2: %x\n", sb.String())
}

输出:

Method 1: c3bf
Method 2: ff

在第一种方法中,Go 将

ÿ
附加到字符串,因为 255 是这个 Unicode 字符的代码点。

在第二种方法中,Go 将

0xff
(255) 字节附加到字符串中。这是期望的结果,但是有没有更简单的方法来完成此任务,而不需要导入
strings
包?为什么 Go 在第一个方法中将字节解释为 Unicode 代码点?

go unicode utf-8
1个回答
0
投票

在第一种方法中,您将字节转换为字符串,该字符串首先将该字节解释为 unicode 代码点。

https://go.dev/ref/spec#Conversions

您始终可以将字符串转换为字节,添加一个字节,然后将其转换回字符串:

str := string(append([]byte(sourceStr), byteValue))
© www.soinside.com 2019 - 2024. All rights reserved.