在 go 中创建子字符串会创建一种新的符号

Beg*_*ner 1 string utf-8 go rune

我正在比较字符串,并且有以下内容:

在此处输入图片说明

请注意,NEW 前面的“是不同的。

现在,当像这样调用我的函数时:

my_func(a[18:], b[18:])
Run Code Online (Sandbox Code Playgroud)

结果字符串令人惊讶:

在此处输入图片说明

我该怎么做才能剪掉这个奇怪的符号,为什么它会这样?

dav*_*ave 7

因为这种类型的引号是一个多字节字符,并且您在字符中间拆分字符串。您可以做的是转换为 an[]rune然后转换回来:

https://play.golang.org/p/pw42sEwRTZd

s := "H?llo"
fmt.Println(s[1:3])                 // ??
fmt.Println(string([]rune(s)[1:3])) // ?l
Run Code Online (Sandbox Code Playgroud)