本帖最后由 CrLf 于 2012-4-16 13:15 编辑
本来是要测试代码页与点阵字体尺寸对应关系的,结果无意间遇到了一个神奇的代码页...复制代码 请复制上面的代码保存于 .bat 脚本运行,注意 n 后面必须有个空格
(win7 实测,xp 下待验证)运行后发现创建了一个以空格为名的文件(正常文件名不允许以空格结尾),于是尝试用 unc 路径创建同样的文件:复制代码 结果发现虽然成功创建空文件名的文件,但是却无法删除,看来和前者还是有区别的。
至于 "in " 在 37 代码页下为何会有此效果,我以unicode格式查看37代码页发现其内容十分奇异,下图是 936、437、37 代码页开头部分的内容对照图,可以看到 37 代码页的内容是十分混乱的:
用 cmd /k 运行脚本查看预处理结果:- Active code page: 37
-
- C:\Users\Administrator\Desktop>i1> @
-
- operable program or batch file.rnal or external command,
- C:\Users\Administrator\Desktop>
复制代码 可以看到 "in " 在 37 代码页下被预处理为 "i1> @"也就是说 "n" 被映射为 ">"
这里的 "i" 其实只代表一个不存在的命令名称,可以是其他字符,但要留意该代码页下的字符映射关系
而 "n" 后的空格也可以是其他非字母字符,比如:- chcp 37
- in
- in;
- in,
- in:
- in#
复制代码 其结果是分别创建了五个以空格为名的文件...简直匪夷所思,同目录下,同名文件居然也能共存?
没有做更深入的测试,至少我将 37 代码页下的预处理结果放到 936 和 437 代码页下运行时是报错的,更没有听说过同名文件共存的先例,所以只能认为 37 代码页另有玄机,不能以常理揣度,发个帖子看看有没有专业人士来解惑。 |