【问题标题】:UTF-8 range table in GoGo 中的 UTF-8 范围表
【发布时间】:2021-09-16 16:24:27
【问题描述】:

我一直在阅读 unicode Go page,我想知道范围表的用例是什么。它们可以用来做什么?是否有检索单个字符所在范围的函数。

【问题讨论】:

    标签: string go utf-8


    【解决方案1】:
    推荐的答案 Go Language

    范围表的目的是它是描述一组字符的有效方式。由于字符被添加到 Unicode 标准的方式,具有相似属性的字符通常会一起找到。因此,列出存在特定字符集的范围通常比列出每个单独的字符更节省空间。

    这允许您通过执行一系列范围检查来查找给定字符是否存在于特定字符集中。如果字符的 Unicode 代码点在范围表中的任何范围内,则该字符被认为是范围表描述的字符集的一个元素。

    没有通用函数来检索单个字符所在的范围,因为character -> range 在一般情况下不是唯一的或特别有用的关系。例如,以字母A 为例。它存在于[65, 90](ASCII 大写字母)范围内,但也存在于[0, 127](所有ASCII 字符)范围内,以及[9, 9999][60, 70] 等范围内。

    如果您想知道某个字符是否在一组特定的范围表中,您可以使用unicode.In 函数。

    Example:

    package main
    
    import (
        "fmt"
        "unicode"
    )
    
    func main() {
        found := unicode.In('A', unicode.Latin)
        fmt.Println(found)
    }
    
    true
    

    这将检查A 是否存在于任何给定范围表unicode.Latin 或“拉丁语脚本中的Unicode 字符集”中

    【讨论】:

    • 谢谢。这就是我一直在寻找的答案。
    • 我有一个后续问题。您已经给出了可以在其中找到 A 的四个范围。这四个范围是否在 Golang unicode 页面中被命名为范围?如果有,有哪些?再次感谢。
    • @Dubby 选择这些数字作为任意示例,只是为了说明“范围”本身是任意的。只有在上下文中,特定范围或范围表才有意义。您可以针对unicode 包中的每个范围表测试一个字符,但仍然可能存在该包中未包含的有意义的字符集。还应注意RangeTable 类型是透明的,这意味着您可以创建自己的有效表。我还更新了答案以显示我忽略的更简单的用法。
    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多