【发布时间】:2021-09-16 16:24:27
【问题描述】:
我一直在阅读 unicode Go page,我想知道范围表的用例是什么。它们可以用来做什么?是否有检索单个字符所在范围的函数。
【问题讨论】:
我一直在阅读 unicode Go page,我想知道范围表的用例是什么。它们可以用来做什么?是否有检索单个字符所在范围的函数。
【问题讨论】:
范围表的目的是它是描述一组字符的有效方式。由于字符被添加到 Unicode 标准的方式,具有相似属性的字符通常会一起找到。因此,列出存在特定字符集的范围通常比列出每个单独的字符更节省空间。
这允许您通过执行一系列范围检查来查找给定字符是否存在于特定字符集中。如果字符的 Unicode 代码点在范围表中的任何范围内,则该字符被认为是范围表描述的字符集的一个元素。
没有通用函数来检索单个字符所在的范围,因为character -> range 在一般情况下不是唯一的或特别有用的关系。例如,以字母A 为例。它存在于[65, 90](ASCII 大写字母)范围内,但也存在于[0, 127](所有ASCII 字符)范围内,以及[9, 9999]、[60, 70] 等范围内。
如果您想知道某个字符是否在一组特定的范围表中,您可以使用unicode.In 函数。
package main
import (
"fmt"
"unicode"
)
func main() {
found := unicode.In('A', unicode.Latin)
fmt.Println(found)
}
true
这将检查A 是否存在于任何给定范围表unicode.Latin 或“拉丁语脚本中的Unicode 字符集”中
【讨论】:
A 的四个范围。这四个范围是否在 Golang unicode 页面中被命名为范围?如果有,有哪些?再次感谢。
unicode 包中的每个范围表测试一个字符,但仍然可能存在该包中未包含的有意义的字符集。还应注意RangeTable 类型是透明的,这意味着您可以创建自己的有效表。我还更新了答案以显示我忽略的更简单的用法。