赞
踩
使用 Java 语言生成了 Windows 系统中的 bat 批处理脚本 , 运行后出现中文乱码 ;
使用如下 Java 代码生成 bat 脚本文件 ;
public class Main {
public static void main(String[] args) throws Exception {
File bat = new File("cmd.bat");
FileWriter fileWriter = new FileWriter("cmd.bat");
fileWriter.write("del delete_file.txt\n");
fileWriter.write("del 待删除文件.txt\n");
fileWriter.write("pause");
fileWriter.close();
}
}
生成内容如下 :
del delete_file.txt
del 待删除文件.txt
pause
执行该 bat 脚本出现如下问题 :
单独指令这两个命令 , 是可以执行成功的 ;
但是执行该批处理文件 , 出现乱码 ;
打开该批处理文件 , 如果使用 UTF-8 编码打开 , 文件内容正常 ;
但是 bat 脚本是使用 ANSI 编码的 , 如果切换成 ANSI 编码 , 发现成乱码了 ;
这个乱码就是 bat 脚本执行的乱码 ;
修改程序后 , 以 GB2312 格式输出 , 使用 ANSI 编码打开 , 没有乱码 ;
执行时出现如下情况 , 还是乱码 ;
这就比较纠结 , 网上找的资料 , 显示只要是 ANSI 格式的 , 都可以执行 ;
这一次新创建一个 cmd1.bat 文件 , 并且使用记事本保存 , 另存为 ANSI 编码 , cmd1.bat 文件 ;
执行 cmd1.bat 脚本 , 居然没有乱码 ;
上二进制分析工具 , 分析这两个文件 ;
这是不可执行的 cmd.bat 的二进制数据 :
这是可执行的 cmd1.bat 的二进制数据 :
观察关键数据 , cmd1.bat 文件中 , 在 txt 后 , 多了一个字节 , 在 WIndows 系统中 , 换行时 \r\n , Java 程序中生成的是 \n 作为换行 , 这里特别注意 , 找了几个小时 ;
上述 Java 程序出现 2 2 2 个问题 , 一个是 没有以 GB2312 格式输出 , 另一个是 WIndows 系统中的文本换行必须是 “\r\n” , 否则程序也无法执行 ;
修改后的程序 :
import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws Exception { File bat = new File("cmd.bat"); OutputStreamWriter osw =new OutputStreamWriter((new FileOutputStream("cmd.bat")),"gb2312"); osw.write("del delete_file.txt\r\n"); osw.write("del 待删除文件.txt\r\n"); osw.write("pause\n"); osw.close(); } }
执行后 , 发现乱码问题解决 ;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。