Arrays 从符文/int8数组转换为字符串,反之亦然
我正在从Java向Go移植一个库。这个库以字符串的形式传递所有参数和返回,由于后续步骤,我必须保持这种方式。我注意到,当我将符文/int8数组转换为字符串,并将其转换回符文/int8数组时,我得到了不同的值。我相信这是由Unicode字符引起的。有没有办法获得相同的值Arrays 从符文/int8数组转换为字符串,反之亦然,arrays,go,Arrays,Go,我正在从Java向Go移植一个库。这个库以字符串的形式传递所有参数和返回,由于后续步骤,我必须保持这种方式。我注意到,当我将符文/int8数组转换为字符串,并将其转换回符文/int8数组时,我得到了不同的值。我相信这是由Unicode字符引起的。有没有办法获得相同的值 package main import "fmt" func main() { runes := make([]rune,3) runes[0] = 97 runes[1] = -22 r
package main
import "fmt"
func main() {
runes := make([]rune,3)
runes[0] = 97
runes[1] = -22
runes[2] = 99
s := string(runes)
fmt.Println(runes)
for _,r := range(s) {
fmt.Println(r)
}
}
输出:
[97 -22 99]
97
65533
99
[97 -22 99]
a�c
97 a false
65533 � true
99 c false
与字符串类型之间的转换
将有符号或无符号整数值转换为字符串类型会产生
包含整数的UTF-8表示形式的字符串。价值观
转换为的有效Unicode代码点范围之外
“\uFFFD”
将符文片段转换为字符串类型会产生一个
转换为字符串的单个符文值的串联
Go中的Type
byte
是Typeuint8
的别名
Typerune
,一个Unicode码点(24位无符号整数),是int32
的别名
Go将Unicode代码点(rune
s)编码为UTF-8编码的string
s
以你为例,
package main
import (
"fmt"
"unicode"
)
func main() {
// Unicode code points are 24-bit unsigned integers
runes := make([]rune, 3)
runes[0] = 97
runes[1] = -22 // invalid Unicode code point
runes[2] = 99
fmt.Println(runes)
// Encode Unicode code points as UTF-8
// Invalid code points converted to Unicode replacement character (U+FFFD)
s := string(runes)
fmt.Println(s)
// Decode UTF-8 as Unicode code points
for _, r := range s {
fmt.Println(r, string(r), r == unicode.ReplacementChar)
}
}
游乐场:
输出:
[97 -22 99]
97
65533
99
[97 -22 99]
a�c
97 a false
65533 � true
99 c false
参考资料:
-22不是有效的runeHi@JimB,如果我使用int8,我会得到相同的结果。关键是如何在字符串上存储负值并将其取回。字节是用java签名的,因此当您打印单个字节时,可以获得范围
[-128127]
内的内容。Go想要uint8,在你的例子中是234
。我不明白为什么我会得到不同的值。如果在示例代码中,我们将符文更改为int32,结果将是sameok,范围很好,但当您试图说出字符值234
时,仍然给它一个负数。您好@peterSO谢谢您的回答。我将使用int8数组而不是字符串重构库。@安德烈·安德拉德:Java字符串编码为UTF-16(uint16)。“字符串表示UTF-16格式的字符串。”