对于最后两个输出,我期待得到 밥 和 좋은。
用于输出,但这不会“组合”以下任何内容。
这个包什么都不做。
谁能告诉我这段代码哪里做错了?我将不胜感激。
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
最佳答案
是的,它确实有所作为。如果您观察第一次操作的输出:
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而是阻止。
关于string - 规范包 : how do I combine separate characters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837256/