Go语言中字符串len返回94而非实际51字符的原因咨询
问题原因解析
- Go语言里的字符串本质是UTF-8编码的字节序列,
len()函数返回的是字符串占用的字节总数,不是视觉上的字符个数。 - 你代码里的字符串用的是西里尔字母(俄语字母),这类字符在UTF-8编码中每个占2个字节;而空格字符每个占1个字节。
- 对应到你的场景:51个字符里包含若干空格和西里尔字母,算下来总字节数正好是94,和
len()的返回结果匹配。
如果要获取实际的字符数量,可以用utf8.RuneCountInString()函数,示例代码如下:
package main import ( "fmt" "unicode/utf8" ) func main() { s := "САЛИХА ХАМЗЕЕВНА ГАРИПОВА САЛ ХА ХАМЗЕ ВНА ГАР ПОВА" fmt.Println("字节数:", len(s)) fmt.Println("字符数:", utf8.RuneCountInString(s)) }
运行后会输出字节数94、字符数51,和你的预期一致。
内容的提问来源于stack exchange,提问作者M.AhmedSiddiqui BM
相关产品推荐
相关产品推荐

