一不留神被转义字符坑了一小下。或者说是自己把自己坑了一小下。

之前写过个小程序,其中有个功能是通过源JSON中的title值对文件进行重命名。

本来就有文件名过滤的方法用于将JSON中的非法字符给替换掉。不过最近JSON格式略有改变,有些title里会加入转义字符(Escape sequence),比如 “ \t ”。这么一来如果在Windows下直接将这种title用于目标文件名是会报错的。已有的替换方法会将JSON中常见的非法字符替换为全角字符(比如 “ * ” 变成 “*” 这样),于是我就轻车熟路加上了对于 \t 的处理语句(其实只要清掉它即可)。不过没留神的是,因为 C# 里面平时替换反斜杠(backslash)的时候是用 2 条反斜杠作为 keyword 进行字符串替换。于是在加入这个新东西的时候,习惯性的输入 String.Replace(“\\t”, “”);

于是程序就很有个性的无视了源数据里面的那个\t,搞得我调试了好一会儿,最后发现是自己秀逗了,应该用 “\t” 作为关键字而非 “\\t”。因为 \t 已经是 C# 中自带的转义字符了[1],若在此使用 2 条反斜杠反而适得其反,使得意义完全不同了。

(环境:VS Express 2013 for Desktop)


[1] https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/h21280bw(v=vs.120)