下载了一些东西,发现文件名全都是乱码,好几百张图片也没法一个一个改。
写了一个Java程序,运行一下帮我修改过来。
- 首先确定两个编码。
- 一个是确定文件名现在的编码
- 中文的win10 环境下文件名一般都是默认GBK编码
- 因为文件拷贝过来的时候被系统用GBK的方式错误解码,才会出现乱码的现象
- 当然,个别人的系统可能不是GBK,比如Linux的是UTF-8,经过修改设置的win10也可以是UTF-8
- 可以打开命令提示符CMD,输入chcp命令,查看活动代码页编号,936就是GBK,65001就是UTF-8
- 另一个是确定文件名本来应该是什么编码
- 乱码最多的可能原文件是UTF-8(看你文件哪里来的,合理判断一下)
- 比如我下载的就是日文的东西,最可能的编码是Shift_JIS或者windows-31J
- 一个是确定文件名现在的编码
- 根据上方的推测进行测试
- 复制几个文件名乱码的文件到一个新的空文件夹下
- 将文件的路径名填入
- 注意,windows下路径是以一个反斜杠“\”作为分隔符,但是程序中用一个反斜杠可能会将它后边的字符转义,反而让程序无法正确识别路径
- 可以将反斜杠“\”替换成斜杠“/”,这是Unix系统的路径分隔符,windows是可以兼容识别的
- 也可以再加一个反斜杠,变成“ \ \”,这样程序识别的时候就会转义出来一个反斜杠,不会误转义其他字符(Markdown格式两个反斜杠会被转义为一个,为了显示清楚我中间加了个空格)
- 将当前系统文件名的编码填入getBytes()中,比如我填的就是"GBK"
- String.getBytes(String decode)是获得该字符串在此编码格式下byte数组
- 将推测出的文件名本来的正确编码填入new String(byte[], decode)的decode处,比如我填的"windows-31J"
- new String(byte[], decode)使用decode编码将byte[]转换成字符串
- 运行程序进行测试修改
- 原文件的本来编码如果推测出错,修改的文件名就还会有乱码的情况
- 比如我一开始推测的编码其实是Shift_JIS,后来发现仍然有一部分的乱码的情况后来换成Windows-31J才修改成功
- 找到正确的编码后,将路径修改为想要修改的文件路径,进行批量修改
- 注意,该路径下的所有文件必须都是一起的,相同编码格式,如果有后放进去的其他文件,这个文件将会被修改成乱码
- 这个程序的原理以我的例子举例
- 文件名是gbk编码,该乱码本应该是日文编码Windows-31J,将乱码用使它错误的编码格式获得正确的byte数组,再用正确的编码格式解析出该字符串,再给文件命名
- 程序
import java.io.File;
import java.io.Unsup