为什么 utf-8 编码字节 \xbd 在 for range 循环中被格式化为 unicode

 [Exercise: Put an invalid UTF-8 byte sequence into the string. (How?) What happens to the iterations of the loop?]

我所做的是

    const nihongo = "\xbd日本語\xbd"

    for index, runeValue := range nihongo {

        fmt.Printf("%x, %d\n", runeValue, index)

    }

输出是


fffd, 0

65e5, 1

672c, 4

8a9e, 7

fffd, 10

我的问题是。utf-8编码的字节如何bd格式化为单位代码点u+fffd?


SMILET
浏览 73回答 1
1回答

小唯快跑啊

此行为由Spec: For 语句指定:对于带有范围子句的语句对于字符串值,“range”子句从字节索引 0 开始迭代字符串中的 Unicode 代码点。在连续迭代中,索引值将是连续 UTF-8 编码代码点的第一个字节的索引字符串和类型为 的第二个值rune将是相应代码点的值。如果迭代遇到无效的 UTF-8 序列,则第二个值将为0xFFFDUnicode 替换字符,并且下一次迭代将在字符串中前进一个字节。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go