Go:如何找出符文的Unicode属性?

我想找出一个符文的Unicode属性,特别是它的脚本属性的值. Unicode有这个说法(在 http://www.unicode.org/reports/tr24/第1.5节):

The script property assigns a single value to each character, either
explicitly associating it with a particular script, or assigning one
of several specail [sic] values.

Go的unicode包为我提供了一种方式来问:“脚本x中的这个符文是什么?”,但我没办法问,“这个符文是什么剧本?”.我显然可以迭代所有脚本,但这样会浪费.找到一个符文的剧本是否有更聪明的方法? (我总是可以实现一个自组织列表,但我正在寻找已经做了我想要的标准go库中的东西,而且我忽略了.)

谢谢大家!

最简单,最快捷的解决方案是编写函数.例如,

package main

import (
    "fmt"
    "unicode"
)

var runeScript map[rune]string

func init() {
    const nChar = 128172 // Version 9.0.0
    runeScript = make(map[rune]string, nChar*125/100)
    for s, rt := range unicode.Scripts {
        for _, r := range rt.R16 {
            for i := r.Lo; i <= r.Hi; i += r.Stride {
                runeScript[rune(i)] = s
            }
        }
        for _, r := range rt.R32 {
            for i := r.Lo; i <= r.Hi; i += r.Stride {
                runeScript[rune(i)] = s
            }
        }
    }
}

func script(r rune) string {
    return runeScript[r]
}

func main() {
    chars := []rune{' ', '0', 'a', 'α', 'А', 'ㄱ'}
    for _, c := range chars {
        s := script(c)
        fmt.Printf("%q %s\n", c, s)
    }
}

输出:

$go run script.go
' ' Common
'0' Common
'a' Latin
'α' Greek
'А' Cyrillic
'ㄱ' Hangul
$
相关文章
相关标签/搜索