Правильная кодировка имен файлов в zip-архивах, созданных в Windows и распакованных в Linux

2091
Ole

У меня проблемы с разными кодировками в Windows и Linux (Centos).

У меня есть файлы со специальными символами в именах файлов из разных языков. Zip-архив создается под Win7 и загружается на сервер Linux. Под Windows все символы отображались нормально, как и ожидалось. Но после загрузки и распаковки с помощью phps ZipArchive()или Linux unzipнекоторые специальные символы отображались со странными неправильными символами.

Я знаю, что это известная проблема во взаимодействии между Windows и Linux, но я не могу решить свою проблему. Я пытался разархивировать мой zip-файл с разными кодировками, но у меня ничего не получалось. На португальском языке характерная черта характера создает много проблем, но все в порядке.

aplicações.txt после расстегивания молнии aplicaçΣes.txt

Насколько я понял правильно, windows использует кодировку ASCII-кода IBM860, но иногда я читаю windows-1257 и не знаю, какая кодировка используется, когда zip-архив создается с WinRar под Win7. Есть ли способ проверить это или сказать WinRar использовать UTF-8?

Когда zip-архив загружается в Linux и распаковывается ZipArchive()(php) или в Linux bashс unzip, имена файлов неверны. Думаю, это потому, что Linux использовал UTF-8.

Под командой Linux я попытался:

unzip -O windows-1257 uploaded.zip -d zipout/ 

Под командой Linux я попытался:

unzip -O IBM860 uploaded.zip -d zipout/ 

Под командой Linux я попытался:

unzip -O IBM437 uploaded.zip -d zipout/ 

Под командой Linux я попытался:

unzip -O UTF-8 uploaded.zip -d zipout/ 

Под командой Linux я попытался:

unzip -O UTF-16 uploaded.zip -d zipout/ 
2
Вы пробовали это с любым кроссплатформенным программным обеспечением, доступным для Windows и Linux, например, `7zip`. Просто любопытно, если это имеет значение. Sandeep 5 лет назад 1
По-видимому, WinRAR версии 3.92 и более ранние не работают должным образом с UTF-8. Какую версию WinRAR вы используете? Andrew Morton 5 лет назад 1
Действительно, я пробовал 7z, также с собственным форматом файлов .7z, но с тем же результатом. Я был сбит с толку, потому что думал, что 7zip по умолчанию использует utf-8 для кодирования даже под windows. Есть ли способ явно сказать 7zip использует utf-8? Ole 5 лет назад 0
WinRar, вероятно, использовал cp437. Однако õ не существует в этом наборе символов. Вы можете изменить все имена файлов перед сжатием файлов. Если вы добавите, например, китайский символ в конец каждого имени файла, вы заставите WinRar использовать Utf8. SpiderPig 5 лет назад 0
Хорошо, это имело бы смысл. Спасибо за вашу подсказку с китайским иероглифом, я также попробую это, чтобы убедиться, что он работает правильно с кодировкой utf-8. Ole 5 лет назад 0

1 ответ на вопрос

1
Vi Lugao

Если языком вашей версии Windows 7, используемой для архивирования файлов, является бразильский португальский язык, то, вероятно, кодировкой будет IBM-850 или Windows-1252. Попробуйте это.

У меня тоже есть эта проблема. Но также бывает при переносе между разными языками Windows. Например, между английской и бразильской португальской версиями Windows английская версия использует IBM-437, а версия pt-BR - IBM-850.

Если вы используете WinZip для архивирования, эта проблема не возникает. Я не рекомендую использовать встроенную Windows для архивирования и / или распаковки, так как это также вызывает проблемы с кодировкой имен файлов.