我想检查给定的符文是否在基本的多语言平面中。
也就是说,要在此函数中添加什么-https://play.golang.org/p/3szTn8pP7xe
package main
import (
"fmt"
)
func isBMP(r rune) bool {
// ???
return false
}
func main() {
fmt.Println(isBMP(rune('?'))) // expect true
fmt.Println(isBMP(rune(''))) // expect false
}
Run Code Online (Sandbox Code Playgroud)
基本多语言平面分配了以下代码点范围:
0000–?0FFF 8000–?8FFF
1000–?1FFF 9000–?9FFF
2000–?2FFF A000–?AFFF
3000–?3FFF B000–?BFFF
4000–?4FFF C000–?CFFF
5000–?5FFF D000–?DFFF
6000–?6FFF E000–?EFFF
7000–?7FFF F000–?FFFF
Run Code Online (Sandbox Code Playgroud)
因此,要确定符文是否落在基本的多语言平面中,只需检查其是否在这些范围内即可。由于这些范围涵盖0和之间的所有值0xffff(包括两个值),因此请像这样检查它:
func isBMP(r rune) bool {
return r >= 0 && r <= 0xffff
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于rune是的别名int32,它可能具有负值,因此检查它是否不是负数也很重要。
这将输出您的预期结果。在Go Playground上尝试一下。
注意#2:遍历包含无效UTF-8字节的字符串的符文,您将获得无效字节的Unicode替换字符,即0xfffd。如果要从测试中排除那些,则可以按以下方式进行修改:
func isBMP(r rune) bool {
return r >= 0 && r <= 0xffff && r != 0xfffd
}
Run Code Online (Sandbox Code Playgroud)