如果可以实现记得点赞分享,谢谢老铁~
本文所说的方法是在出现文件名乱码情况下,如何恢复文件名的正确中文名称,并非一劳永逸地避免乱码的出现。这是由于下载文件名称乱码的出现,往往是系统、浏览器、网站三方面因素共同影响导致的,错综复杂。想要避免乱码的出现,只能根据具体的情况,对个人的系统或浏览器做出针对特定网站的调整配置。
PS: 如果你是一个开发者,你完全可以让后台人员处理下载文件名称包括内容的乱码问题。
因为本人用的是MAC,所以只诠释MAC系统。
macOS 系统
macOS系统自带强大的自动化支持,如 Automator 和 AppleScript。这里,我使用 Automator 编写了一个文件服务,使用方法:
1.右键单击需要处理的文件,进入创建服务
如下图所示:
2.这个服务不需要网络,支持批量处理多个文件或文件夹。只有「运行 Shell 脚本」的操作,其中的 Shell 代码为:
PS: 这里要优先下载好 python 分两个版本,根据自身需求进行选择
Python版本
# 调用 Python 内置模块进行解码
alias urldecode='python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
# 遍历选择的文件列表,进行重命名
for f in "$@"
do
newName=$(urldecode "$f")
mv "$f" "$newName"
done
Python 3.0+ 版本
import sys
import urllib.parse
import os
import shutil
def urldecode(url):
return urllib.parse.unquote_plus(url)
for f in sys.argv[1:]:
newName = urldecode(f)
shutil.move(f, newName)
将上述对应的脚本复制粘贴到下图所示当中:
3.最后保存,命名服务名称为 UrlDecode
再次右键打开你需要解析的文件,如图所示:
找到你创建好的服务,如果找不到请重启电脑。
到这里你已经解决了大部分文件名乱码的情况,哈哈哈哈,老铁点个赞收藏。
2. 自å 类型乱码
还有其他的情况,macOS 10.13.4 中文系统 Safari 与 Chrome 浏览器下载文件名均正常。英文系统中,两种浏览器下载文件名均为乱码。
1.按照上面的步骤创建一个新的服务名称为 å 修复文件名乱码
一样分两个Python版本
Pyhton:
for f in "$@"
do
fileName=$(basename ${f})
filePath=$(dirname ${f})
# 两种乱码类型 GBK、UTF-8
{ fileNewName=$(echo $fileName | iconv -f UTF-8-Mac -t latin1 | iconv -f gbk)
} || { fileNewName=$(echo $fileName | iconv -f UTF-8-Mac -t latin1)
}
# 文件名正常或乱码类型不属上述两种时,新文件名为空,则跳过
if [ -n "$fileNewName" ]; then
# 避免文件重复:如果已存在修复后的文件名,则在新文件名后加上随机字符串。
if [ -e ${filePath}/$fileNewName ]; then
mv "$f" "${filePath}/${fileNewName}-${RANDOM}"
else
mv "$f" "${filePath}/${fileNewName}"
fi
fi
done
Python 3.0+ 版本
import os
import shutil
import random
import sys
for f in sys.argv[1:]:
fileName = os.path.basename(f)
filePath = os.path.dirname(f)
# 两种乱码类型 GBK、UTF-8
fileNewName = fileName.encode('latin1').decode('gbk') if fileName.encode('utf-8').decode('utf-8', 'ignore') != fileName else fileName.encode('utf-8').decode('utf-8', 'ignore')
# 文件名正常或乱码类型不属于上述两种时,新文件名为空,则跳过
if fileNewName:
# 避免文件重复:如果已存在修复后的文件名,则在新文件名后加上随机字符串。
if os.path.exists(os.path.join(filePath, fileNewName)):
newFileName = f"{fileNewName}-{random.randint(0, 99999)}"
else:
newFileName = fileNewName
shutil.move(f, os.path.join(filePath, newFileName))
2.记得保存文件服务就可以了,完毕。
3.结语
可以看到上述代码是在解决两种乱码情况,其中 GBK 乱码是我们常遇到的,UTF-8 类型较为少见,顺手加上。
乱码的出现总是让人烦心的。希望本文介绍的方法能够帮助你解决遇到的问题。