windows - 在 ubuntu 上解压后文件名错误

标签 windows ubuntu encoding unzip winrar

问题

我有一个 zip 文件,我想用正确的文件名在 Ubuntu 上解压缩(它们包含æ、ø、å)。

我试过的:

1. 在 Windows 10 中解压缩 - 工作!

一切都按预期工作,文件名正确。

2.在Ubuntu中解压

unzip file.zip

文件名中缺少字符 æ、ø 和 å,其中“æ”已替换为“C”。

我试图检测 zip 文件的编码,但它似乎没有告诉我任何信息。
file file.zip

3.在Ubuntu中使用编码解压

我尝试使用通常用于包含æ、ø、å 的文本的各种编码来解压文件。
unzip -O UTF-8 file.zip
unzip -O ISO-8859-1 file.zip
unzip -O windows-1257 file.zip

没有工作...

4.在Ubuntu中使用7zip解压

建议 7zip 可以解决这个问题,但没有..
7z x file.zip

5. 在 Ubuntu 中使用 7zip 和丹麦语设置解压

建议我更改ubuntu语言设置,然后重试。
saveLang=$LANG
export LANG=da_DK
7z x file.zip
export LANG=$saveLang

这也行不通。

6. 在 Ubuntu 中使用 Python3 解压 - 工作!

如果我为此目的使用 Python3,解压缩可以正常工作,但必须有更简单的方法吗?
import zipfile

with zipfile.ZipFile('file.zip', "r") as z:
  z.extractall("/home/xxxx/")

7. 下一步

我正在考虑查找“所有”编码列表,然后仅提取文件名并手动浏览它们。类似的东西...
while read p; do
  echo "$p"
  unzip -j -O $p file.zip
done <encodings.txt

结论

Windows 和 Python3 似乎有一些我无法复制的魔法。你们对这个“魔法”是什么有什么建议吗?
  • 如何识别 zip 文件的文件名的编码?
  • 我在哪里可以获得第 7 步的所有编码列表。
  • 有什么简单的方法可以解决这个问题而无需编写例如一个python脚本?
  • 最佳答案

    您提供的关键信息是 unrar在 Windows 上能够正确创建文件名。所以除非unrar正在做一些编码检测,这意味着 zip 文件中使用的编码很有可能与 Windows 设置中使用的默认代码页相匹配。

    使用 chcp在 Windows 上,您会看到您的代码页是

    Active code page: 850
    

    那么告诉 unzip 就很简单了。 zip 文件中使用的编码是 CP850
    unzip -O CP850 file.zip
    

    关于windows - 在 ubuntu 上解压后文件名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62148274/

    相关文章:

    java - 将 java 应用程序从不区分大小写的文件系统移动到区分大小写的文件系统

    windows - ClickOnce 和应用程序数据

    postgresql - 无法构建 pg gem

    postgresql - Postgres密码认证问题

    python - 如何有效地对utf-8编码的文件进行切片

    javascript - 将 html 表导出到 Excel javascript 函数特殊字符已更改

    windows - 有什么理由不在 COM+ 应用程序中承载 COM 服务器?

    gcc - Ubuntu 上的 pycrypto 给出编译器错误

    encoding - 将带变音符号的 NSString 转换为 const char *

    windows - 导入模块 : The specified module 'msonline' was not loaded because no valid module file was found in any module directory