ContainsRune给出了奇怪的结果

时间:2014-09-10 21:01:04

标签: unicode utf-8 go

我在Go Playground中运行此代码:

fmt.Println(strings.ContainsRune("\xa0", '\xa0'))

我想知道,为什么输出false?根据{{​​3}},它说:

  

如果Unicode代码点r在s内,则ContainsRune返回true。

在我看来,代码点在那里,它会给false作为回应似乎很奇怪。

2 个答案:

答案 0 :(得分:5)

" \ X0A"不是unicode代码点。

fmt.Println(strings.ContainsRune("\u00a0", '\u00a0'))

按预期工作。

答案 1 :(得分:3)

因为它不是有效的unicode代码点,所以strings.IndexRune

func IndexRune(s string, r rune) int {
    switch {
    case r < 0x80:
        .....
    default:
        .....
    }
    return -1
}

如果您尝试utf8.ValidString("\xa0"),则会返回false。