1. 现象
在处理 CSV 文件导入时,你可能遇到过这种“灵异事件”:
- CSV 文件第一列叫 tag_id。
- 程序用 encoding/csv 读进 Map 后,尝试用 mp["tag_id"] 取值。
- 结果: 永远返回空值,但打印整个 Map 时,肉眼看 Key 确实是 tag_id。
- 而这其实是你遇到了零宽字符: 【ZWNBSP】。
点击查看代码[code]package mainimport ( "bytes" "encoding/csv" "fmt" "strings" "unicode")/* [模拟 CSV 表格结构] 文件编码: UTF-8 with BOM (字节流开头包含 \xef\xbb\xbf) | 列名 (Header) | 数据 (Row 1) | |-----------------|---------------| | [ZWNBSP]tag_id | 1 | | name | Popular | 注:[ZWNBSP] 在编辑器和 Excel 中完全不可见,但在内存中占 3 个字节。*/func main() { // 1. 模拟 CSV 内容:手动在开头加入 UTF-8 BOM (\xef\xbb\xbf) content := "\xef\xbb\xbf" + "tag_id,name\n1,Gemini" // 2. 解析 CSV reader := csv.NewReader(bytes.NewBufferString(content)) records, _ := reader.ReadAll() // 3. 构建 Map header := records[0] row := records[1] mp := make(map[string]string) for i, colName := range header { mp[colName] = row } // 4. 尝试通过标准字符串 Key 读取 targetKey := "tag_id" val, exists := mp[targetKey] /* [预计打印结果] --- 结果演示 --- 直接打印 Map: map[tag_id:1 name:Gemini] |