在 Windows 中创建并在 linux 中解压缩的 zip 档案中的文件名的正确编码

Ole*_*Ole 5 windows linux zip character-encoding special-characters

我在 Windows 和 Linux (Centos) 中遇到不同字符集的问题。

我的文件名中有来自许多不同语言的特殊字符的文件。zip 压缩包在 Win7 下生成并上传到 Linux 服务器上。在 Windows 下,所有字符都按预期正常显示。但是用phps'ZipArchive()或Linux上传解压后,unzip显示一些特殊字符,显示奇怪的错误字符。

我知道这是 Windows 和 Linux 之间相互作用的一个已知问题,但我无法解决我的问题。我试图用不同的字符集解压缩我的 zip 文件,但对我来说没有任何效果。在葡萄牙语中,字符 õ 有很多问题,但 ç 没问题。

aplicações.txt 是解压后 aplicaç?es.txt

据我了解,windows使用的是ASCII码字符集IBM860,但是在Win7下用WinRar制作zip压缩包的时候,有时候读到windows-1257不知道用的是哪个字符集。有没有办法检查这个,或者告诉 WinRar 使用 UTF-8?

当 zip 存档上传到 linux 操作系统并由ZipArchive()(php) 或在bash带有的 Linux 上解压缩时unzip,文件名是错误的。认为是因为linux使用了UTF-8。

在 linux 命令下我试过:

unzip -O windows-1257 uploaded.zip -d zipout/ 
Run Code Online (Sandbox Code Playgroud)

在 linux 命令下我试过:

unzip -O IBM860 uploaded.zip -d zipout/ 
Run Code Online (Sandbox Code Playgroud)

在 linux 命令下我试过:

unzip -O IBM437 uploaded.zip -d zipout/ 
Run Code Online (Sandbox Code Playgroud)

在 linux 命令下我试过:

unzip -O UTF-8 uploaded.zip -d zipout/ 
Run Code Online (Sandbox Code Playgroud)

在 linux 命令下我试过:

unzip -O UTF-16 uploaded.zip -d zipout/
Run Code Online (Sandbox Code Playgroud)

小智 2

如果用于压缩文件的 Windows 7 版本的语言是巴西葡萄牙语,则编码可能是 IBM-850 或 Windows-1252。试试这些。

我也有这个问题。但在 Windows 不同语言之间传输时也会发生这种情况。例如,在英语和巴西葡萄牙语 Windows 版本之间,英语版本使用 IBM-437,pt-BR 版本使用 IBM-850。

如果您使用 WinZip 进行压缩,则不会出现此问题。我不建议使用内置的 Windows 来压缩和/或解压,因为这也会导致文件名的编码问题。