找回密码
 立即注册
首页 业界区 业界 记录一次bug:不可见字符/零宽字符

记录一次bug:不可见字符/零宽字符

崆蛾寺 2026-2-10 17:45:16
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]

相关推荐

2026-2-13 21:05:08

举报

您需要登录后才可以回帖 登录 | 立即注册