2 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
這應(yīng)該是一條評(píng)論,但它需要太多空間。
還有一件需要考慮的事情是當(dāng)您的輸入字符串不是有效的 UTF-8 時(shí)會(huì)發(fā)生什么。
請(qǐng)記住,Go 字符串是字節(jié)序列。它不必是有效的 Unicode。它可能旨在表示有效的 Unicode,也可能不是。例如,它可能是 ISO-Latin-1 或其他可能無(wú)法與 UTF-8 兼容的內(nèi)容。
如果它不是UTF-8,則range
對(duì)其使用循環(huán)會(huì)將每個(gè)無(wú)效序列轉(zhuǎn)換為無(wú)效符文。(請(qǐng)參閱鏈接的 Go 博客文章。)如果它是有效的 UTF-8,這可能是一個(gè)優(yōu)點(diǎn),當(dāng)然,您可以檢查生成的RuneError
.
您的原始循環(huán)僅保留 ASCII DEL(127 或 0x7f)以上的字符。如果字符串中的字節(jié)類似于ISO-Latin-1,則這可能是正確的行為。如果不是,您可能會(huì)向其他程序傳遞無(wú)效的、未經(jīng)處理的輸入。如果您有意清理輸入,則必須找出它期望什么樣的輸入,并完成清理輸入的工作。
(我仍然因被迫應(yīng)對(duì)一個(gè)非常糟糕的 XML 編碼器以及一些以前的工作中的舊數(shù)據(jù)庫(kù)而感到痛苦,所以我在這里往往格外小心。)

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
這應(yīng)該在某種程度上相當(dāng)于您的代碼:
out := bytes.Buffer{}
for _, x := range str {
if strings.IndexRune(`\",= `, x)!=-1 {
out.WriteRune('\\')
}
out.WriteRune(x)
}
return out.String()
- 2 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)