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

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

如何檢測(cè) Go 中何時(shí)無(wú)法將字節(jié)轉(zhuǎn)換為字符串?

如何檢測(cè) Go 中何時(shí)無(wú)法將字節(jié)轉(zhuǎn)換為字符串?

Go
慕森王 2021-12-13 10:23:16
存在無(wú)法轉(zhuǎn)換為 Unicode 字符串的無(wú)效字節(jié)序列。如何檢測(cè)轉(zhuǎn)換時(shí)[]byte要string進(jìn)去嗎?
查看完整描述

1 回答

?
浮云間

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

正如 Tim Cooper 所指出的,您可以使用utf8.Valid.

但!您可能認(rèn)為將非 UTF-8 字節(jié)轉(zhuǎn)換為 Gostring是不可能的。事實(shí)上,“在 Go 中,一個(gè)字符串實(shí)際上是一個(gè)只讀的字節(jié)片”;它可以包含無(wú)效的 UTF-8 字節(jié),您可以打印這些字節(jié)、通過索引訪問、傳遞給WriteString方法,甚至返回到 a []byteWrite例如)。

Go 語(yǔ)言中有兩個(gè)地方確實(shí)string為你做s 的UTF-8 解碼。

  • 當(dāng)你這樣做時(shí)for i, r := range sr是一個(gè) Unicode 代碼點(diǎn)作為類型的值rune

  • 當(dāng)您進(jìn)行轉(zhuǎn)換時(shí)[]rune(s),Go 會(huì)將整個(gè)字符串解碼為符文。

(請(qǐng)注意,這rune是 的別名int32,而不是完全不同的類型。)

在這兩種情況下,無(wú)效的 UTF-8 被替換為U+FFFD,替換字符保留用于此類用途。更多信息請(qǐng)參見規(guī)范部分中關(guān)于s 和其他類型之間的for語(yǔ)句和轉(zhuǎn)換string的內(nèi)容。這些轉(zhuǎn)換永遠(yuǎn)不會(huì)崩潰,因此您只需要主動(dòng)檢查 UTF-8 有效性是否與您的應(yīng)用程序相關(guān),例如如果您不能接受 U+FFFD 替換并且需要在錯(cuò)誤編碼的輸入上引發(fā)錯(cuò)誤。

由于該行為已融入語(yǔ)言,因此您也可以從庫(kù)中期待它。U+FFFDisutf8.RuneError并由 中的函數(shù)返回utf8。

這是一個(gè)示例程序,顯示了 Go 對(duì)[]byte持有無(wú)效 UTF-8 的處理:

package main


import "fmt"


func main() {

    a := []byte{0xff}

    s := string(a)

    fmt.Println(s)

    for _, r := range s {

        fmt.Println(r)

    }

    rs := []rune(s)

    fmt.Println(rs)

}

輸出在不同的環(huán)境中看起來(lái)會(huì)有所不同,但在 Playground 中看起來(lái)像


?

65533

[65533]


查看完整回答
反對(duì) 回復(fù) 2021-12-13
  • 1 回答
  • 0 關(guān)注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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