2 回答

TA貢獻1852條經驗 獲得超1個贊
看起來′
您提供的 (U+00B4) 字符實際上并不是Unicode 定義的組合字符。
>>>?"A\u00b4" 'A′'
如果我們改用??
(U+0301),那么我們只需將它與一個字符按順序放置A
,就可以得到預期的輸出:
>>>?"A\u0301" 'A?'
除非我誤解了你的意思,否則這里看起來不需要任何二進制操作或欺騙。

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 = A?
combined == combining: false
combined == combiningNormalised: true
- 2 回答
- 0 關注
- 159 瀏覽
添加回答
舉報