文章目录

  • 一、报错信息
  • 二、问题分析
  • 二、解决方案

一、报错信息


使用 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 程序出现 222 个问题 , 一个是 没有以 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();}
}

执行后 , 发现乱码问题解决 ;

【错误记录】Windows 系统 bat 脚本报错 ( Java 生成 bat 脚本乱码处理 | 输出 GB2312 字符串 | Windows 中的换行时 \r\n )相关推荐

  1. 【错误记录】Groovy 工程编译报错 ( java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream )

    文章目录 一.报错信息 二.解决方案 一.报错信息 编译 Groovy 工程时 , 报如下错误信息 : gradle-resources-test:Groovy_Demo.main: java.lan ...

  2. 【错误记录】Android 应用运行报错 ( java.lang.VerifyError: Verifier rejected class androidx. | 逆向中遇到的问题 )

    文章目录 一.报错信息 二.问题分析 一.报错信息 从 DEX 文件加载 Activity 组件 , 运行时报如下错误 ; 2021-12-12 14:02:52.432 5342-5342/com. ...

  3. 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )

    文章目录 一.报错信息 二.解决方案 解决 Could not determine java version from '11.0.8'. 问题 , 有两种方案 , 方案一 : Android Stu ...

  4. 【错误记录】执行 Python 程序报错 ( NameError: name ‘reload‘ is not defined )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Windows 的 cmd 命令行运行 python 脚本时 , 报如下错误 : 执行 python ApkTool.py -analyse - ...

  5. 【错误记录】Android Studio 编译报错 ( Error:Connection timed out: connect | 更新配置依赖仓库方式 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 编译 VirtualAppEx 源码时 , 报如下错误 : Gradle 'VirtualAppEx-master' project refresh ...

  6. 【错误记录】Android Studio 编译报错 ( This Gradle plugin requires a newer IDE able to request IDE model leve )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android Studio 中编译 VirtualApp , 报如下错误 : Gradle 'VirtualApp' project refr ...

  7. 【错误记录】Android Studio 编译报错 ( SDK location not found )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : 首次打开别人的项目 , 经常性的报错 ; Could not determine the depende ...

  8. 【错误记录】Android Studio 编译报错 ( Cannot use connection to Gradle distribution . as it has been stopped. )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Cannot use connection to Gradle distribution 'https://services.gradle.org/ ...

  9. 【错误记录】Google Play 上架报错 ( 您上传的 APK 没有经过 Zipalign 处理,请对 APK 运行 Zipalign 工具,然后重新上传。)

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用百度加固后的 APK , 签名后 , 上传 , 报如下错误 ; 您上传的 APK 没有经过 Zipalign 处理,请对 APK 运行 Zipa ...

最新文章

  1. Python字符串转数字
  2. 成功解决Exception “unhandled AttributeError“ module ‘h5py‘ has no attribute ‘File‘
  3. windowswps怎么以文件形式发送_一个招投标项目出现了履约争议,但是没有签订合同,怎么办?...
  4. 是谁扼杀了员工的敬业度?[转]
  5. c语言程序设计对称数,c语言程序设计--对称数
  6. 大数据只做三件事,对用户的理解、对信息的理解、对关系的理解
  7. Vector, ArrayList, LinkedList分析
  8. 系泊系统悬链线matlab,系泊系统的设计.docx
  9. Unity 3D学习(一)Unity 3D介绍与安装
  10. matlab调用第三方api_matlab与外部程序接口调用心得(原创)
  11. 在机器学习领域,怎样写好一篇论文
  12. 嵌入式学习(三)—— STM32入门
  13. 【量化笔记】时间序列--ARCH模型及GARCH模型
  14. C语言程序设计课程学习总结与反思
  15. mac打不开磁盘映像资源忙
  16. 网站木马修复网站漏洞修复方案
  17. 将Python Pandas DataFrame写入docx文档指定位置
  18. 模拟电路 二极管门电路(二)
  19. 几何画板如何添加按钮
  20. [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题

热门文章

  1. (android硬件应用实战)摄像头拍照实现和总结
  2. 30个最常用css选择器解析
  3. 运维笔试Python编程题
  4. Python爬虫(十一)_案例:使用XPath的爬虫
  5. Gibbs sampling
  6. javaweb学习总结二十三(servlet开发之线程安全问题)
  7. hive 的分隔符、orderby sort by distribute by的优化
  8. titanium开发教程-03-02自定义tab group
  9. 闲话WPF之二六(WPF性能优化点)
  10. 联想员工亲历联想大裁员:公司不是家