规范包:我如何组合单独的字符?

时间:2013-11-07 13:30:10

标签: string unicode go character composition

我期待得到밥和좋은,为最后两个输出。

表示输出,但不会“合并”以下任何一项。

这个包没有做任何事情。

有人能说出我在这段代码中做错了什么吗?我将不胜感激。

import "code.google.com/p/go.text/unicode/norm"
import "fmt"

func main() {
  str := "ㅈㅗㅎㅇㅡㄴ"
  fmt.Println( string( norm.NFD.AppendString(nil, "앉") ) )
  fmt.Println( string( norm.NFC.AppendString(nil, "바ㅂ") ) )
  fmt.Println( string( norm.NFC.AppendString(nil, str) ) )
}

包裹来自这里

go get -u code.google.com/p/go.text/unicode/norm http://godoc.org/code.google.com/p/go.text/unicode/norm

1 个答案:

答案 0 :(得分:4)

是的,它有所帮助。如果您观察到第一次操作的输出:

fmt.Println( string( norm.NFD.AppendString(nil, "앉") ) )

您可以看到它已经成功分解了您的字符串,返回了三个代码点来代替您原来的字符。第一个是

U+110B (HANGUL CHOSEONG IEUNG)

虽然不明显,但这与变量中的str字符不同:

U+3147 (HANGUL LETTER IEUNG)

如果你想把你从NFD得到的角色组成,你的确会最终得到。。

修改

str变量中的字母使用Hangul Compatibility Jamo字符,这些字符仅用于向后兼容,但缺少语义属性。如果您希望它起作用,则应使用Hangul Jamo块。