第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Golang strings.EqualFold 給出了意想不到的結(jié)果

Golang strings.EqualFold 給出了意想不到的結(jié)果

Go
小唯快跑啊 2022-10-10 19:05:36
在 golang (go1.17 windows/amd64) 中,下面的程序給出以下結(jié)果:rune1 = U+0130 '?'rune2 = U+0131 '?'lower(rune1) = U+0069 'i'upper(rune2) = U+0049 'I'strings.EqualFold(?, ?) = falsestrings.EqualFold(i, I) = true我認(rèn)為這strings.EqualFold會(huì)在 Unicode 大小寫(xiě)折疊下檢查字符串是否相等;然而,上面的例子似乎給出了一個(gè)反例。顯然,兩個(gè)符文都可以(手動(dòng))折疊成在大小寫(xiě)折疊下相等的代碼點(diǎn)。問(wèn)題:golang 是否strings.EqualFold(?, ?)正確false?我預(yù)計(jì)它會(huì)屈服true。如果 golang 是正確的,為什么會(huì)這樣呢?或者是根據(jù)某些 Unicode 規(guī)范的這種行為。我在這里想念什么。程序:func TestRune2(t *testing.T) {   r1 := rune(0x0130) // U+0130 '?'   r2 := rune(0x0131) // U+0131 '?'   r1u := unicode.ToLower(r1)   r2u := unicode.ToUpper(r2)   t.Logf("\nrune1 = %#U\nrune2 = %#U\nlower(rune1) = %#U\nupper(rune2) = %#U\nstrings.EqualFold(%s, %s) = %v\nstrings.EqualFold(%s, %s) = %v",      r1, r2, r1u, r2u, string(r1), string(r2), strings.EqualFold(string(r1), string(r2)), string(r1u), string(r2u), strings.EqualFold(string(r1u), string(r2u)))}
查看完整描述

2 回答

?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊

是的,這是“正確”的行為。這些字母在大小寫(xiě)折疊下表現(xiàn)不正常。見(jiàn): http ://www.unicode.org/Public/UCD/latest/ucd/CaseFolding.txt

U+0131 有全箱折疊“F”和特殊“T”:


T: special case for uppercase I and dotted uppercase I

   - For non-Turkic languages, this mapping is normally not used.

   - For Turkic languages (tr, az), this mapping can be used instead

     of the normal mapping for these characters.

     Note that the Turkic mappings do not maintain canonical equivalence

     without additional processing.

     See the discussions of case mapping in the Unicode Standard for more information.

我認(rèn)為沒(méi)有辦法強(qiáng)制包字符串使用 tr 或 az 映射。


查看完整回答
反對(duì) 回復(fù) 2022-10-10
?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊

來(lái)自strings.EqualFold源 -unicode.ToLower并且unicode.ToUpper未使用。

相反,它使用unicode.SimpleFold來(lái)查看特定符文是否“可折疊”,因此可能具有可比性:

// General case. SimpleFold(x) returns the next equivalent rune > x

// or wraps around to smaller values.

r := unicode.SimpleFold(sr)

for r != sr && r < tr {

    r = unicode.SimpleFold(r)

}

符文?不可折疊。它的小寫(xiě)代碼點(diǎn)是:


r := rune(0x0130)        // U+0130 '?'

lr := unicode.ToLower(r) // U+0069 'i'


fmt.Printf("foldable? %v\n", r != unicode.SimpleFold(r))   // foldable? false

fmt.Printf("foldable? %v\n", lr != unicode.SimpleFold(lr)) // foldable? true

如果符文不可折疊(即SimpleFold返回自身) - 那么該符文只能匹配自身而不能匹配其他代碼點(diǎn)。

https://play.golang.org/p/105x0I714nS


查看完整回答
反對(duì) 回復(fù) 2022-10-10
  • 2 回答
  • 0 關(guān)注
  • 166 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)