2 回答
TA贡献1852条经验 获得超1个赞
看起来´
您提供的 (U+00B4) 字符实际上并不是Unicode 定义的组合字符。
>>> "A\u00b4" 'A´'
如果我们改用◌́
(U+0301),那么我们只需将它与一个字符按顺序放置A
,就可以得到预期的输出:
>>> "A\u0301" 'Á'
除非我误解了你的意思,否则这里看起来不需要任何二进制操作或欺骗。
TA贡献1848条经验 获得超6个赞
正如 StardustGogeta 在他们的回答中解释的那样,“尖音”口音的正确组合 unicode 字符是 U+0301(组合尖音)。
但是在 Go 中,由单个 U+00C1(带尖音符的拉丁文大写字母 A)字符组成的字符串不等于由 U+0041(拉丁文大写字母 A)后跟 U+0301(组合尖音符)组成的字符串)
如果要比较字符串,则需要将两者都规范化为相同的规范化形式。
以下代码片段展示了如何做到这一点:
package main
import (
"fmt"
"golang.org/x/text/unicode/norm"
)
func main() {
combined := "\u00c1"
combining := "A\u0301"
fmt.Printf("combined = %s, combining = %s\n", combined, combining)
fmt.Printf("combined == combining: %t\n", combined == combining)
combiningNormalised := string(norm.NFC.Bytes([]byte(combining)))
fmt.Printf("combined == combiningNormalised: %t\n", combined == combiningNormalised)
}
输出:
combined = Á, combining = Á
combined == combining: false
combined == combiningNormalised: true
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报