码迷,mamicode.com
首页 > 其他好文 > 详细

批处理为乱码但可以正常执行的问题分析

时间:2021-04-05 11:59:47      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:off   open   utf-16   int   add   上下   delete   tar   打开   

有这样一种情况,在网上下载的用于实现某些Windows功能的批处理文件,能够正常运行并取得预期效果,但编辑该文本文件,发现是乱码,无法知道该批处理是如何写的。下图示例该批处理:

运行该批处理的界面是:

技术图片

 

编辑该批处理显示的内容是:

技术图片

 

注意到右下角文本编码显示的是【UTF-16 LE】,文本是乱码,首先应该想到的是编码错误,也就是该文件用notepad打开是用【UTF-16 LE】的方式解码的,而实际上该文本不是这个编码。

批处理能够正常执行是因为批处理读取该文本的时候会直接用ansi来解码,无视文件头编码,因此跳过了文件头编码,后面的内容用ansi来解码能够获取到正确的文本内容并执行。下面我们来验证一下是不是这样的。用python以二进制形式打开这个文件

#data=open(‘special1.bat‘,‘rb‘).read()
#data
b\xff\xfe\r\ncls\r\n@echo off\r\n:Start\r\necho \xc7\xeb\xd1\xa1\xd4\xf1\xd2\xaa\xb2\xd9\xd7\xf7\xb5\xc4\xb7\xbd\xca\xbd\xa1\xbe1\xce\xaa\xd0\xc2\xbd\xa8\xcf\xee\xc4\xbf\xa3\xbb2\xce\xaa\xc9\xbe\xb3\xfd\xcf\xee\xc4\xbf\xa3\xbb3\xce\xaa\xcc\xed\xbc\xd3\xd7\xd3\xb2\xcb\xb5\xa5\xa1\xbf\r\necho \xc8\xe7\xb9\xfb\xd2\xaa\xc9\xbe\xb3\xfd\xcf\xee\xc4\xbf\xa3\xac\xc4\xe3\xd0\xe8\xd2\xaa\xca\xe4\xc8\xeb\xd6\xae\xc7\xb0\xd0\xc2\xbd\xa8\xcf\xee\xc4\xbf\xb5\xc4CLSID\xba\xc5\xa1\xa3\r\nset /p Choices=\r\n\r\nif %Choices%==1 goto AddIcon\r\nif %Choices%==2 goto DeleteIcon\r\nif %Choices%==3 goto SubCommand\r\ngoto Start\r\n\r\n\r\n:AddIcon\r\necho \xc7\xeb\xca\xe4\xc8\...后面省略

我们看到这个文件的开头是\xff\xfe,即【UTF-16 LE】,我们跳过前面的2个字节的编码,提取剩余的字节内容,进行cp936解码

#print(data[2:].decode(‘cp936‘))

cls
@echo off
:Start
echo 请选择要操作的方式【1为新建项目;2为删除项目;3为添加子菜单】
echo 如果要删除项目,你需要输入之前新建项目的CLSID号。
...
以下省略

 

批处理为乱码但可以正常执行的问题分析

标签:off   open   utf-16   int   add   上下   delete   tar   打开   

原文地址:https://www.cnblogs.com/boltkiller/p/14611933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!