如何在 go 中获取字符的 Unicode 值?

我尝试在 Go 中获取字符串字符的 unicode 值作为 Int 值。


我这样做:


value = strconv.Itoa(int(([]byte(char))[0]))

其中 char 包含一个带有一个字符的字符串。


这适用于许多情况。它不适用于 ä, ö, ü, Ä, Ö, Ü 等元音变音。


例如 Ä 的结果是 65,这与 A 的结果相同。


我怎样才能做到这一点?


补充:我有两个问题。第一个是通过以下任何答案解决的。第二个有点棘手。我的输入不是 Go 规范化的 UTF-8 代码,例如变音符号由两个字符而不是一个字符表示。正如ANisus所说,解决方案可以在golang.org/x/text/unicode/norm包中找到。上面的行现在是两行:


rune, _ := utf8.DecodeRune(norm.NFC.Bytes([]byte(char)))

value = strconv.Itoa(int(rune)) 

任何使这个更短的提示都受欢迎......


慕妹3146593
浏览 524回答 3
3回答

红糖糍粑

Go 中的“字符”类型是 ,rune它是 的别名int32,另见Rune 文字。Arune是标识 Unicode 代码点的整数值。在 Go 中,strings 被表示和存储为文本的 UTF-8 编码字节序列。循环的range形式for遍历rune文本的s:s := "äöüÄÖÜ世界"for _, r := range s {    fmt.Printf("%c - %d\n", r, r)}输出:ä - 228ö - 246ü - 252Ä - 196Ö - 214Ü - 220世 - 19990界 - 30028在Go Playground上试一试。如果您想了解有关该主题的更多信息,请阅读此博客文章:Go 中的字符串、字节、符文和字符

潇湘沐

你可以使用这个unicode/utf8包rune,_:=utf8.DecodeRuneInString("Ä")fmt.Println(rune)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go