2 回答

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

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