如何在R中解压含葡萄牙语特殊字符的压缩文件?
在R中解压含葡萄牙语特殊字符的压缩包解决方案
问题背景
尝试用R解压从INEP下载的2010年高等教育普查微数据压缩包,Windows下WinRAR可正常解压,但执行基础R的unzip函数时触发编码错误:
> unzip("data/raw/censo_2010.zip", exdir="data/raw") Error in unzip("data/raw/censo_2010.zip", exdir = "data/raw") : invalid multibyte string at '<87><c6>o '
文件下载代码:
> download.file("https://download.inep.gov.br/microdados/microdados_censo_da_educacao_superior_2010.zip", "data/raw/censo_2010.zip")
查看压缩包内容时,发现文件名中的葡萄牙语特殊字符(如çã)显示为转义序列(\x87\xc6),这是导致unzip函数报错的核心原因。
可行解决方案
方案1:使用archive包替代基础R的unzip
archive包对非UTF-8编码的文件名兼容性更强,无需手动指定编码即可处理:
- 安装并加载包:
install.packages("archive") library(archive)
- 执行解压:
archive_extract("data/raw/censo_2010.zip", dir = "data/raw")
方案2:调用Windows系统命令
直接利用系统工具的编码兼容性来解压,适合需要保持脚本可复现的场景:
- 使用WinRAR命令行(需确保WinRAR安装路径正确):
system('"C:/Program Files/WinRAR/WinRAR.exe" x "data/raw/censo_2010.zip" "data/raw/"')
- 使用PowerShell内置命令(Windows 10及以上系统默认支持):
system('powershell Expand-Archive -Path "data/raw/censo_2010.zip" -DestinationPath "data/raw/" -Force')
方案3:指定编码参数调用基础R的unzip
如果不想额外安装包,可尝试指定压缩包文件名的实际编码(葡萄牙语常用ISO-8859-1):
unzip("data/raw/censo_2010.zip", exdir="data/raw", encoding = "ISO-8859-1")
注:此方法的有效性取决于压缩包的实际编码格式,部分环境下可能无法完全解决问题。
内容的提问来源于stack exchange,提问作者Gabriel Banaggia
相关产品推荐
相关产品推荐

