gpt4 book ai didi

string - 如何获取字符的 Unicode 值?

转载 作者:IT王子 更新时间:2023-10-29 01:48:42 26 4
gpt4 key购买 nike

我尝试获取 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))

任何让这个更短的欢迎词的提示......

最佳答案

字符串是 utf8 编码的,因此要从字符串中解码字符以获得 rune(unicode 代码点),您可以使用 unicode/utf8包。

示例:

package main

import (
"fmt"
"unicode/utf8"
)

func main() {
str := "AÅÄÖ"

for len(str) > 0 {
r, size := utf8.DecodeRuneInString(str)
fmt.Printf("%d %v\n", r, size)

str = str[size:]
}
}

结果:

65 1
197 2
196 2
214 2

编辑:(澄清迈克尔的补充)

可以使用不同的 unicode 代码点创建诸如 Ä 的字符:

预合成: Ä (U+00C4)
使用组合分音符: A (U+0041) + ¨ (U+0308)

为了获得预组合形式,可以使用规范化包,golang.org/x/text/unicode/norm。 NFC(规范分解,后跟 Canonical Composition)形式会将 U+0041 + U+0308 变成 U+00C4:

c := "\u0041\u0308"
r, _ := utf8.DecodeRune(norm.NFC.Bytes([]byte(c)))
fmt.Printf("%+q", r) // '\u00c4'

关于string - 如何获取字符的 Unicode 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29161300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com