部分Zip文件通过7-Zip脚本解压时出现文件名乱码问题排查
解决SQL Server调用7-Zip批量解压Zip文件时的文件名乱码问题
编码格式不匹配
7-Zip的GUI版会自动检测Zip文件的文件名编码(比如GBK、UTF-8等),但命令行版默认采用系统编码,和GUI的自动检测逻辑不一致。
解决:给7-Zip命令添加编码参数,比如-scsUTF-8或-scsGBK。先测试单个乱码文件验证编码:7z l -scsUTF-8 你的乱码文件.zip确认编码正确后,修改SQL中的执行命令:
exec '"for %i in ("'+@path+'\*.zip") do "C:\Program Files\7-Zip\7z.exe" x "%i" -o"'+@to+'" -scsUTF-8"'SQL Server执行环境的编码差异
SQL Server服务的执行上下文和手动打开的CMD编码可能不同,比如手动CMD用UTF-8,但SQL调用的命令行用系统默认ANSI编码。
解决:在命令开头添加代码页切换指令,比如切换到UTF-8(代码页65001):exec '"chcp 65001 && for %i in ("'+@path+'\*.zip") do "C:\Program Files\7-Zip\7z.exe" x "%i" -o"'+@to+'" -scsUTF-8"'Zip文件编码标记缺失
部分老旧Zip文件未设置文件名编码标记,GUI版会自动尝试多种编码解码,而命令行版默认仅按指定编码解析。
解决:使用-scsAuto参数让7-Zip自动检测编码:exec '"for %i in ("'+@path+'\*.zip") do "C:\Program Files\7-Zip\7z.exe" x "%i" -o"'+@to+'" -scsAuto"'命令转义或拼接错误
原命令的引号转义可能存在问题,导致7-Zip解析文件名出错。先打印出生成的完整命令,手动在CMD中执行验证:SELECT '"for %i in ("'+@path+'\*.zip") do "C:\Program Files\7-Zip\7z.exe" x "%i" -o"'+@to+'" -scsAuto"' AS GeneratedCommand如果手动执行也乱码,说明是命令本身的编码参数问题;如果正常,则是SQL执行环境的编码差异导致。
内容的提问来源于stack exchange,提问作者SomeGuy
相关产品推荐
相关产品推荐

