我有以下代码,它应该将 rune
转换为 string
并打印出来。但是,打印时出现未定义的字符。我无法弄清楚错误在哪里:
package main
import (
"fmt"
"strconv"
"strings"
"text/scanner"
)
func main() {
var b scanner.Scanner
const a = `a`
b.Init(strings.NewReader(a))
c := b.Scan()
fmt.Println(strconv.QuoteRune(c))
}
原文由 user3551708 发布,翻译遵循 CC BY-SA 4.0 许可协议
那是因为您使用了
Scanner.Scan()
来读取rune
但它做了其他事情。Scanner.Scan()
can be used to read tokens orrune
s of special tokens controlled by theScanner.Mode
bitmask, and it returns special constants form thetext/scanner
包,而不是读取的符文本身。要读取单个
rune
使用Scanner.Next()
代替:输出:
如果您只想将单个
rune
转换为string
,请使用简单的类型 转换。rune
是 --- 的别名,并将整数转换为int32
string
:所以:
输出:
同样要遍历
string
值的符文,您可以简单地使用for ... range
构造:输出:
或者您可以简单地将
string
值转换为[]rune
:还有
utf8.DecodeRuneInString()
。尝试 Go Playground 上的示例。
笔记:
您的原始代码(使用
Scanner.Scan()
)是这样工作的:Scanner.Init()
将模式 (b.Mode
) 设置为scanner.GoTokens
。Scanner.Scan()
on the input (from"a"
) returnsscanner.Ident
because"a"
is a valid Go identifier: