为什么 Go 向我的字符串添加字节?
Why is Go adding bytes to my string?
当我在 0x80 或以上的字符串中添加一个字节时,golang 会在我的字节之前添加 0xc2。
我认为这与utf8 runes有关。无论哪种方式,我如何将 0x80 添加到字符串的末尾?
示例:
var s string = ""
len(s) // this will be 0
s += string(0x80)
len(s) // this will be 2, string is now bytes 0xc2 0x80
如果我使用 string(0x80)
转换字节,我还没有找到避免添加该字符的方法。但是,我确实发现,如果我将整个字符串更改为字节片段,然后添加字节,然后切换回字符串,我可以获得字符串中正确的字节顺序。
示例:
bytearray := []byte(some_string)
bytearray = append(bytearray, 0x80)
some_string = string(bytearray)
有点愚蠢的解决方法,如果有人找到更好的方法,请 post 它。
Converting a signed or unsigned integer value to a string type yields a string containing the UTF-8 representation of the integer.
表达式 string(0x80) 的计算结果为 UTF-8 表示形式为 0x80 的字符串,而不是包含单个字节 0x80 的字符串。 0x80的UTF-8表示是0xc2 0x80.
使用 \x 十六进制转义符指定字符串中的字节 0x80:
s += "\x80"
您可以使用 string([]byte) 转换从任意字节序列创建字符串。
s += string([]byte{0x80})
当我在 0x80 或以上的字符串中添加一个字节时,golang 会在我的字节之前添加 0xc2。 我认为这与utf8 runes有关。无论哪种方式,我如何将 0x80 添加到字符串的末尾?
示例:
var s string = ""
len(s) // this will be 0
s += string(0x80)
len(s) // this will be 2, string is now bytes 0xc2 0x80
如果我使用 string(0x80)
转换字节,我还没有找到避免添加该字符的方法。但是,我确实发现,如果我将整个字符串更改为字节片段,然后添加字节,然后切换回字符串,我可以获得字符串中正确的字节顺序。
示例:
bytearray := []byte(some_string)
bytearray = append(bytearray, 0x80)
some_string = string(bytearray)
有点愚蠢的解决方法,如果有人找到更好的方法,请 post 它。
Converting a signed or unsigned integer value to a string type yields a string containing the UTF-8 representation of the integer.
表达式 string(0x80) 的计算结果为 UTF-8 表示形式为 0x80 的字符串,而不是包含单个字节 0x80 的字符串。 0x80的UTF-8表示是0xc2 0x80.
使用 \x 十六进制转义符指定字符串中的字节 0x80:
s += "\x80"
您可以使用 string([]byte) 转换从任意字节序列创建字符串。
s += string([]byte{0x80})