压缩软件里的文件名编码

由于默认编码环境不同,打包时正常的文件和目录,在解包时就是乱码了。就拿winrar来说,windows中文版下,默认的编码是GBK在这里插入图片描述
你将一堆文件打包给mac用户或者linux用户,那边的默认编码是UTF8,解压出来文件内容没有毛病,但是文件名却是一堆乱码。
其实WinRAR是这样约定的:如果压缩文件包含 Unicode 文件名并且 WinRAR 能够可靠地检测到它,WinRAR 会忽略此菜单里"名称加密"当前设置,并使用 Unicode 名称。 当没有可用的 Unicode 名称时或无法确切地检测到编码时才使用 “名称加密” 的设置。也就是说,你传一个以utf8编码的包给他人,别人都能识别,但是你如果把自己winrar“名称加密”设置为utf8并"保存当前"的话,别人发给你utf8文件当然可以识别文件名,但是如果是gbk编码的,则识别为乱码了。所以windows下winrar最佳使用方式是打包时选择utf8格式,设置仍为默认的gbk格式。。。,可惜厂商还没有这样给实现。。。
我在node.js里用compressing处理zip包,就遇到有用户提供的包内是utf8编码,另一些用户是gbk编码。虽然知道一些检查zip内文件名编码的方案,但是一般不能确保有效,于是干脆给业务进行了一个约定,windows下打包的zip后缀名按.zip小写命名,就使用默认gbk编码,linux/mac下或者其他以utf8打包的zip以.ZIP大写命名,后台以zip的后缀大小写来区分编码格式,以此解包:

...
let tmpdir=file.substr(0,file.length-4);
let encodeset=(file.endsWith(".zip"))?"gbk":"utf8";
compressing.zip.uncompress(destPath+"/"+file, destPath+"/"+tmpdir,{zipFileNameEncoding:encodeset}).then(() => { 
...

简单粗暴,业务同意即可。。。如果自己去深研压缩包文件编码格式搞个自动检测,判断失误了还挺麻烦的。。。

### 回答1: 如果你想修改 Linux 压缩包面的文件名,可以使用以下命令: 1. 解压文件: ``` tar -zxvf yourfile.tar.gz ``` 2. 进入解压后的目录: ``` cd yourfile ``` 3. 修改文件名: ``` mv oldfilename newfilename ``` 4. 重新压缩文件: ``` tar -zcvf newfile.tar.gz * ``` 其中,`oldfilename` 是原来的文件名,`newfilename` 是你想要修改成的文件名,`newfile.tar.gz` 是重新压缩后的文件名。注意,`*` 符号表示将当前目录下的所有文件都打包进去。如果你只想打包某个文件夹或某个文件,可以将 `*` 替换成相应的路径。 ### 回答2: 在Linux操作系统中,可以使用一些命令来修改压缩包面的文件名。常用的命令有unzip和tar。 使用unzip命令解压缩.zip文件,同时修改压缩包内的文件名。可以使用以下命令: unzip -j -O CP936 文件名.zip -d 目标文件夹 其中,-j参数表示只解压文件,不创建目录;-O参数指定解压后的文件名编码格式,这使用CP936表示使用GBK编码文件名.zip表示要解压文件名;-d参数表示指定解压到的目标文件夹。 使用tar命令解压缩.tar.gz文件,同时修改压缩包内的文件名。可以使用以下命令: tar -zxvf 文件名.tar.gz --transform s/旧文件名/新文件名/g -C 目标文件夹 其中,-zxvf参数表示解压缩.tar.gz文件;--transform参数用于修改文件名,s/旧文件名/新文件名/g表示将旧文件名替换为新文件名文件名.tar.gz表示要解压文件名;-C参数表示指定解压到的目标文件夹。 通过以上命令,可以对压缩包内的文件名进行修改。请注意,使用这些命令时需要确保对应的压缩包已经正确安装,并且命令后面的文件名、目标文件夹等需要根据实际情况进行替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值