首页 > 解决方案 > R检测下载的zip文件的文件名编码

问题描述

我使用 Windows 从网上下载了一个文件 zip 文件。

包含的文件具有拉丁字符,因为它们来自墨西哥网站: 这个文件后跟单击“Descargar”。

如果我使用文件资源管理器提取文件,它们会正确显示名称。
例如,“códigos_postales\tabla de códigos.txt”还有更多。(邮政编码表)

但是,如果我通过 R 提取它unzip("códigos_postales.zip")(使用 RStudio),它们会显示不正确。
例如“c¢digos postales\tabla de c¢digos.txt”

事先设置编码我试过:

zc_list <- unizp("códigos_postales.zip", list = TRUE)
zc_names <- zc_list$Name
Encoding(zc_names) <- "latin1" (also "utf-8" and "Windows-1252") 

但这并不能正确显示它们,并且无论如何它都无助于我提取它们。
此外,通过以下方式猜测编码:

> guess_encoding(zc_names)
ISO-8859-1
ISO-8859-2

> Encoding(zc_names) <- "ISO-8859-1"  #(or -2)
> zc_names 
...
c¢digos_postales/Tabla de C¢digos Postales.txt

所以我也尝试先下载它们,然后再重命名它们:

cp_extracted <- unzip("códigos_postales.zip")
for (each_file in cp_extracted) {
    file.rename(each_file, each_file %>% str_replace_all("¢", "ó"))
}

这不起作用,甚至会删除文件,原因
有两个: + 嵌套文件和文件夹包含拉丁字符,因此重命名只能应用于文件名。
+ 最终,我只识别出这个字符“¢” -> “ó”,不确定是否还有其他字符。如果不是通过整体编码来识别错误的字符是不正确的。

我的问题是:
1. 如何正确提取 zipfile 以便正确应用编码。
2. 如果这是不可能的,并且我确实需要重命名它们,我该如何遍历文件和目录并用一组适当的拉丁字符替换它们。

我的机器的语言环境是:

> Sys.getlocale()
[1] "LC_COLLATE=Spanish_Mexico.1252;LC_CTYPE=Spanish_Mexico.1252;LC_MONETARY=Spanish_Mexico.1252;LC_NUMERIC=C;LC_TIME=Spanish_Mexico.1252"

谢谢。

标签: rwindowslocale

解决方案


推荐阅读