Прислали на мыло толстый zip к картинками, открываю -- а там вот такое порево... Как можно побороть?
(http://xn--80ajipfcchzg.xn--p1ai/_MEINE/file_names.png)
Zip - какашка! Вечная проблема с кракозюберами.
Попробуй открыть архив бесплатным 7zip`ом. Он почти всегда правильно определяет кодировку.
Какая версия WinRAR?
Короче, оказалось, что так имена портятся под ХР, а дома у меня с недавних пор семерка. Произошла вышеописанная порча при скачивании папок с файлами через браузер из облака Мэйл.ру (перед таким скачиванием они автоматом пакуются в zip).
Цитата: Хромис Красавец от августа 4, 2021, 17:57
Zip - какашка! Вечная проблема с кракозюберами.
А почему это происходит? Как технически объясняется? И в какой момент? В процессе архивирования?
Цитата: From_Odessa от августа 5, 2021, 11:18
А почему это происходит? Как технически объясняется? И в какой момент? В процессе архивирования?
Да понятно же почему. Когда создавался формат zip, там просто не предусматривались имена файлов за пределами ASCII. В результате разные программы записывают туда русские буквы в разных кодировках, и одна программа не всегда может корректно прочитать запакованное другой.
Поддерживаю предложение открыть файл 7-zip -ом вместо ВинРара.
Цитата: Upliner от августа 5, 2021, 11:22
Да понятно же почему. Когда создавался формат zip, там просто не предусматривались имена файлов за пределами ASCII. В результате разные программы записывают туда русские буквы в разных кодировках, и одна программа не всегда может корректно прочитать запакованное другой.
То есть, проблема только с кириллицей?
И возникает она уже при чтении архива?
А если распаковать, проблема остается? При распаковке имена файлов даются распаковывающей программой?
Цитата: From_Odessa от августа 5, 2021, 11:24
То есть, проблема только с кириллицей?
И возникает она уже при чтении архива?
А если распаковать, проблема остается? При распаковке имена файлов даются распаковывающей программой?
На все вопросы -- да.
Upliner, благодарю! :)
Заодно тогда спрошу: из-за чего у "Блокнота" иногда проблемы с кодировкой, и текст там превращается в непонятные символы?
Цитата: From_Odessa от августа 5, 2021, 11:24И возникает она уже при чтении архива?
Однако насчёт этого вопроса можно всё-таки уточнить, что иногда и запаковывающая программа может не знать, как записывать русские буквы, и заменять их скажем, на ????. В таких случаях буквы уже никак не восстановить. Но вроде у ТСа не тот случай.
Цитата: From_Odessa от августа 5, 2021, 11:26Заодно тогда спрошу: из-за чего у "Блокнота" иногда проблемы с кодировкой, и текст там превращается в непонятные символы?
Так то же самое. Скажем, в Досе и Винде используются разные кодировки, в Линуксе по умолчанию UTF-8, с которым в старых виндах были проблемы, но сейчас уже поправили, в сторонних програх могут ещё всякие использоваться. Вот в Notepad++ есть переключатель кодировок, там проблему решить проще.
Цитата: From_Odessa от августа 5, 2021, 11:26из-за чего у "Блокнота" иногда проблемы с кодировкой, и текст там превращается в непонятные символы?
Блокнот пытается определить кодировку файла, и если в нем четное количество байт, иногда текст ошибочно распознается как написанный в Юникоде. Лечится добалением ключа
/a к командной строке.
Цитата: СНовосиба от августа 5, 2021, 11:40Блокнот пытается определить кодировку файла, и если в нем четное количество байт, иногда текст ошибочно распознается как написанный в Юникоде. Лечится добалением ключа /a к командной строке.
Можно же при открытии выбирать, но возможности выбора очень ограничены. Ключ /a равнозначен выбору ANSI, но это не всегда помогает.
Цитата: Upliner от августа 5, 2021, 11:22В результате разные программы записывают туда русские буквы в разных кодировках, и одна программа не всегда может корректно прочитать запакованное другой.
Проблема с кодировками в ZIP была решена в 2006 году.
Цитата: СНовосиба от августа 5, 2021, 12:21Проблема с кодировками в ZIP была решена в 2006 году.
А WinXP, в которой наблюдалась проблема, вышла в 2001.
Цитата: Upliner от августа 5, 2021, 12:34А WinXP, в которой наблюдалась проблема, вышла в 2001.
WinXP не имеет никакого отношения к чтению архивов.
Цитата: СНовосиба от августа 5, 2021, 12:36WinXP не имеет никакого отношения к чтению архивов.
Ну вообще-то там есть встроенная функция для запаковки и распаковки zip. Теоретически, mail.ru мог паковать файлы, ориентируясь на неё.
Хотя согласен, скорее всего виноват старый WinRar.
«Была решена в Νом году» еще не значит, что весь софт автоматически под это решение подстроился, и что даже после появления решения софт с нерешенной проблемой не продолжал создаваться. Более того, вполне возможна ситуация решения проблемы двумя разными производителями ПО двумя несовместимыми способами.
Цитата: СНовосиба от августа 5, 2021, 12:36
WinXP не имеет никакого отношения к чтению архивов.
Есть встроенная возможность открывать .zip-архивы как папки — так что имеет.
Цитата: Python от августа 5, 2021, 12:44Более того, вполне возможна ситуация решения проблемы двумя разными производителями ПО двумя несовместимыми способами.
Ну, вообще-то СНовосиба имел в виду, что в 2006 году решение было стандартизировано, и соответственно с тех пор только один способ решения соответствует стандарту.
Стандарт — всего лишь рекомендация для следующих разработок (на создание и распространение которых может пойти время). И он не решает проблем, например, с созданными прежде архивами, этому стандарту не соответствующими — если таковых накопилось достаточно много, разработчик ПО или администрация сайта может игнорировать стандарт ради совместимости с ними.
Цитата: Python от августа 5, 2021, 13:21
на создание и распространение которых может пойти время
Заинтересовал вот этот языковой момент. Мне кажется, это украинизм, обусловленный украинским "піти", которое в данном случае соответствует русскому "уйти".
Цитата: Upliner от августа 5, 2021, 11:22
Цитата: From_Odessa от августа 5, 2021, 11:18
А почему это происходит? Как технически объясняется? И в какой момент? В процессе архивирования?
Да понятно же почему. Когда создавался формат zip, там просто не предусматривались имена файлов за пределами ASCII. В результате разные программы записывают туда русские буквы в разных кодировках, и одна программа не всегда может корректно прочитать запакованное другой.
Поддерживаю предложение открыть файл 7-zip -ом вместо ВинРара.
Пробовал FAR'ом -- была та же картина. Ладно, сейчас уже скачал в семерку, распаковал, унес на ХР-шный комп на флэшке.
Цитата: Upliner от августа 5, 2021, 11:32Вот в Notepad++ есть переключатель кодировок, там проблему решить проще.
Но иногда можно не угадать с кодировкой и потерять исходный текст. Так что экспериментировать лучше на копиях файлов.
Цитата: From_Odessa от августа 5, 2021, 13:23
Цитата: Python от августа 5, 2021, 13:21
на создание и распространение которых может пойти время
Заинтересовал вот этот языковой момент. Мне кажется, это украинизм, обусловленный украинским "піти", которое в данном случае соответствует русскому "уйти".
С точки зрения моего идеолекта русского, в данном контексте, «пошло время» — «было потрачено некоторое время», а «ушло время» — скорее, либо «было потрачен всё доступное время», либо «ушло безвозвратно»... В украинском такое различие не наблюдается — там только «пішов час».
Цитата: Python от августа 5, 2021, 17:08
С точки зрения моего идеолекта русского, в данном контексте, «пошло время» — «было потрачено некоторое время», а «ушло время» — скорее, либо «было потрачен всё доступное время», либо «ушло безвозвратно»... В украинском такое различие не наблюдается — там только «пішов час».
Мне незнакомо такое употребление в русском. Только "время пошло" в смысле 'начался отчет'. А если речь идет о затратах времени, то только "ушло", "уходить", но не "пошло", "пойти". Однако посмотрим, что скажут другие форумчане.
Цитата: From_Odessa от августа 5, 2021, 11:18
Цитата: Хромис Красавец от августа 4, 2021, 17:57
Zip - какашка! Вечная проблема с кракозюберами.
А почему это происходит? Как технически объясняется? И в какой момент? В процессе архивирования?
Все линуксоиды в курсе этой проблемы. На форумах всё обсуждалось 100500 раз -
https://www.opennet.ru/tips/2494_zip_rus_patch.shtml
https://unixforum.org/viewtopic.php?t=121805
В каждом дистрибутиве решают проблему по-своему. Или вообще не решают. Можно каждый zip распаковывать командой в терминале с точным указанием кодировки.
В альтлинуксе unzip пропатчили, в астралинуксе вроде тоже.
Есть B1 free archiver, он всегда корректно определяет кодировку, ставится почти под любой линукс.
В windows универсальное решение - 7-zip.
Цитата: Хромис Красавец от августа 5, 2021, 20:09Все линуксоиды в курсе этой проблемы.
В 2010 году, ага.
На Линуксе сижу с 2007, но с проблемой сталкивался очень редко. А когда и сталкивался -- то тупо переименовывал файлы вручную (как правило, их было немного)
Цитата: Upliner от августа 7, 2021, 15:30
На Линуксе сижу с 2007, но с проблемой сталкивался очень редко. А когда и сталкивался -- то тупо переименовывал файлы вручную (как правило, их было немного)
А как удавалось догадаться, какие имена у них были исходно? Или там кодировка КОИ-8?
Цитата: СНовосиба от августа 7, 2021, 15:19
Цитата: Хромис Красавец от августа 5, 2021, 20:09Все линуксоиды в курсе этой проблемы.
В 2010 году, ага.
Я тоже люблю иронию. Но именно эта проблема никуда не делась. На работе я часть времени занимаюсь наполнением сайта. Одно из требований к размещаемым файлам - (сюрприз :) ) является формат zip.
Я пытался переломить эту ситуацию, размещал архивы в 7z, но несколько раз получил по шапке и успокоился.
Во многих даже отечественных дистрибутивах unzip не пропатчен. Если в линуксе (например в минте) сжимаешь папку в zip, то пользователи винды видят кракозюберы в именах файлов. И наоборот.
В некоторых случаях zip архив из win 10 открывается с кракозюберами в win 7. Про XP я вообще молчу.
Я разместил тысячи архивов в этом чёртовом формате, знаю о чём говорю.
Вот свежий пример, и это нифига не 2010 год.
(https://i.ibb.co/x7PhC12/2021-08-07-20-01-01.png) (https://ibb.co/x7PhC12)
Цитата: Хромис Красавец от августа 7, 2021, 20:03Вот свежий пример, и это нифига не 2010 год.
Это проблема Ark / file-roller / ArchiveManager, короче всех гуёвых архиваторов. Я ими практически не пользуюсь. Простой unzip распаковывает нормально. Похоже, что в Убунте он таки пропатченный...
В общем да, смотрю сейчас практически все виндовые архиваторы забивают на стандарт 2006 года и кодируют имена файлов в досовской кодировке cp866, в то время как по стандарту положен utf8. Но в то же время 7-zip нормально понимает utf-8, возможно проблемы возникают только в WinRar.
Похоже, совместимость с досом для винды важнее, чем стандарты...
Интересно, существуют ли архиваторы, в которых кодировку можно своими руками указать? (RAR тоже может, но там только три кодировки — KOI8 прочитать не получится).
Цитата: Python от августа 8, 2021, 00:16
Интересно, существуют ли архиваторы, в которых кодировку можно своими руками указать? (RAR тоже может, но там только три кодировки — KOI8 прочитать не получится).
Я таких не видел. Разве что выше Хромис давал ссылки как можно извратиться и перед запаковкой/после распаковки переименовать файлы с помощью iconv.
Впрочем, если выбор OEM- и ANSI-кодировки зависит от установок операционной системы, можно попробовать сменить их глобально (если это возможно без переустановки системы) — напр., установить KOI8-U в качестве OEM или ANSI — и попробовать открыть архив с этой кодировкой тем же RARом?
Цитата: Python от августа 8, 2021, 01:51установить KOI8-U в качестве OEM или ANSI
Насколько я знаю, КОИ-8 не входит ни в ОЕМ, ни в ANSI.
Цитата: Upliner от августа 8, 2021, 02:02
Цитата: Python от августа 8, 2021, 01:51установить KOI8-U в качестве OEM или ANSI
Насколько я знаю, КОИ-8 не входит ни в ОЕМ, ни в ANSI.
В консоли, тем не менее, KOI8-R, KOI8-U можно использовать как кодовые страницы 20866, 21866. В консоли они обрабатываются как «ANSI-кодировки» (т.е., без поддержки растровых шрифтов и полноэкранного режима) — впрочем, неуверен, насколько «ANSI-кодировки в консольном окне» могут использоваться в качестве глобальной ANSI-кодировки системы.
Цитата: Python от августа 8, 2021, 02:35впрочем, неуверен, насколько «ANSI-кодировки в консольном окне» могут использоваться в качестве глобальной ANSI-кодировки системы.
Вроде уже давно нет свободного выбора глобальной кодировки. Только язык и страну можно выбирать, и для каждого доступна только определённая кодировка.
У меня в TheBAT! для вновь создаваемых писем по умолчанию KOI8-R стоит! :P
Цитата: zwh от августа 8, 2021, 06:21У меня в TheBAT! для вновь создаваемых писем по умолчанию KOI8-R стоит!
КОИ-8 была троллингом одного человека, и распространилась из-за технической безграмотности российского сегмента интернета.
Цитата: Upliner от августа 7, 2021, 20:43В общем да, смотрю сейчас практически все виндовые архиваторы забивают на стандарт 2006 года и кодируют имена файлов в досовской кодировке cp866
"Сжатые папки" из Windows отказываются архивировать файлы с неюникодными именами, но поддерживают UTF-8.
WinRAR поддерживает UTF-8. 7-Zip поддерживает UTF-8. О каких архиваторах идет речь?
Цитата: Хромис Красавец от августа 7, 2021, 20:03Вот свежий пример, и это нифига не 2010 год.
В линупсе с поддержкой человеческого языка все сложно по определению.
Цитата: СНовосиба от августа 8, 2021, 13:297-Zip поддерживает UTF-8. О каких архиваторах идет речь?
Только что запаковал zip-файл гуёвым 7-zip-ом и там никаким UTF-8 не пахнет. И галочки никакой не вижу, чтобы делал уникодные имена. Может в коммандной строке у 7z и есть какой волшебный ключик, но кто ж ей под виндой пользуется.
Распаковывает UTF-8 нормально, спору нет.
Цитата: СНовосиба от августа 8, 2021, 13:29"Сжатые папки" из Windows отказываются архивировать файлы с неюникодными именами
В Win10 ничего не отказывается. Делаю Send to -> Compressed (zipped) file и получаю такой же зипник с кодировкой cp866.
Цитата: Python от августа 8, 2021, 02:35В консоли, тем не менее, KOI8-R, KOI8-U можно использовать как кодовые страницы 20866, 21866. В консоли они обрабатываются как «ANSI-кодировки» (т.е., без поддержки растровых шрифтов и полноэкранного режима) — впрочем, неуверен, насколько «ANSI-кодировки в консольном окне» могут использоваться в качестве глобальной ANSI-кодировки системы.
Я так и не понял, как? Что-то ни в одной винде не припомню, чтобы можно было свободно выбирать кодировку консоли. Вот сейчас в десятке форсированно стоит OEM 866 и поменять не даёт. Ни смена шрифтов, ни Legacy mode не помогают. Для КОИ-8 в своё время ставил для Far-а специальное расширение, ну так он просто преобразовывал в тот же cp866.
Цитата: Upliner от августа 8, 2021, 13:55Для КОИ-8 в своё время ставил для Far-а специальное расширение
Сейчас эта функция доступна в Far-е из коробки, но нигде не пишут, что КОИ-8 это ANSI
Цитата: Upliner от августа 8, 2021, 13:44Только что запаковал zip-файл гуёвым 7-zip-ом и там никаким UTF-8 не пахнет. И галочки никакой не вижу, чтобы делал уникодные имена.
Так запакуйте файл с юникодным (хотя бы украинским) именем, и все будет.
Цитата: zwh от августа 2, 2021, 14:49Прислали на мыло толстый zip к картинками, открываю -- а там вот такое порево... Как можно побороть?
Обновите WinRAR хотя бы до 4-й версии.
Цитата: СНовосиба от августа 8, 2021, 13:29
Цитата: zwh от августа 8, 2021, 06:21У меня в TheBAT! для вновь создаваемых писем по умолчанию KOI8-R стоит!
КОИ-8 была троллингом одного человека, и распространилась из-за технической безграмотности российского сегмента интернета.
В смысле "троллингом"??? Она спецом была сделана так, что если буржуйские проги в сообщениях на русском резали старший бит, то их хотя бы можно было осмысленно прочесть.
Цитата: СНовосиба от августа 8, 2021, 15:07
Цитата: zwh от августа 2, 2021, 14:49Прислали на мыло толстый zip к картинками, открываю -- а там вот такое порево... Как можно побороть?
Обновите WinRAR хотя бы до 4-й версии.
Стоит версия 5.50
Цитата: Upliner от августа 8, 2021, 13:55
Что-то ни в одной винде не припомню, чтобы можно было свободно выбирать кодировку консоли.
В пределах консольного окна можно переключать командой chcp (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/chcp) (желательно, чтобы при этом в настройках консольного окна был выбран какой-либо из векторных шрифтов — Lucida Console, Consolas и пр. — в противном случае, ANSI-кодировки будут отображаться неправильно). Вроде бы, где-то в системном реестре можно менять и консольную кодовую страницу по умолчанию.
(wiki/ru) Фал (https://ru.m.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BB)
Цитата: СНовосиба от августа 8, 2021, 15:06Так запакуйте файл с юникодным (хотя бы украинским) именем, и все будет.
Значит, посоветуете Хромису в каждый архив специально засовывать файл с украинским именем? Костыль конечно тот ещё...
Цитата: Python от августа 8, 2021, 15:57В пределах консольного окна можно переключать командой chcp (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/chcp)
Ну что ж, да, работает. Но опять же не вижу, чтобы оно отображалось как ANSI. Пишет просто 20866 (русская - КОИ8)
Цитата: Upliner от августа 8, 2021, 16:39Значит, посоветуете Хромису в каждый архив специально засовывать файл с украинским именем? Костыль конечно тот ещё...
И таки не рабтает -- запаковал вперемешку файлы с русскими и украинскими названиями -- utf8 применяется только для украинских файлов, но не для русских. Может, помогло бы глобально поставить в винде cp1250 по дефолту, но этот костыль тоже не всегда удобен...
Цитата: Upliner от августа 8, 2021, 13:55Что-то ни в одной винде не припомню, чтобы можно было свободно выбирать кодировку консоли.
Цитата: Python от августа 8, 2021, 15:57В пределах консольного окна можно переключать командой chcp
:yes: А ещё если в меню ПКМ любого консольного окна залезть в «Свойства», поменять любую настройку (в том числе выбор векторного шрифта) и нажать OK, консолька спросит:
Цитата: (http://puu.sh/I2oiu.png) |
И таким образом можно оставить шрифт для любого вызываемого окна консоли.
Автор ветки, поправьте "фалы" на "файлы". Бесит.
Цитата: Bhudh от августа 8, 2021, 17:22
А ещё если в меню ПКМ любого консольного окна залезть в «Свойства», поменять любую настройку (в том числе выбор векторного шрифта) и нажать OK
Шрифты и кодировки — разные вещи. Разве что растровые шрифты сосздают проблемы при работе с частью кодовых страниц. Сменить кодировку сменой шрифта не получится
Цитата: jvarg от августа 8, 2021, 17:37
Автор ветки, поправьте "фалы" на "файлы". Бесит.
А как это сделать?
Цитата: Python от августа 8, 2021, 17:50Сменить кодировку сменой шрифта не получится
Разумеется. Я про это и не писал. Просто сменив кодировку без соответствующего шрифта можно тоже нарваться на непонятное.
Цитата: zwh от августа 8, 2021, 18:23
Цитата: jvarg от августа 8, 2021, 17:37
Автор ветки, поправьте "фалы" на "файлы". Бесит.
А как это сделать?
Наверно, сейчас только модераторов попросить. Заголовок темы меняется путем редактирования первого сообщения в теме (нужно изменить в нем поле с заголовком), но если время редактирования кончилось, то автор темы сам это сделать не сможет.
Цитата: zwh от августа 8, 2021, 15:26Стоит версия 5.50
Очень интересно. Скачайте пару пустых файлов с русскими именами и выложите архив.
Цитата: СНовосиба от августа 8, 2021, 19:13
Цитата: zwh от августа 8, 2021, 15:26Стоит версия 5.50
Очень интересно. Скачайте пару пустых файлов с русскими именами и выложите архив.
А смысл, Я так понимаю, что причина в том, что этот архив с кривыми русскими именами файлов я получил в конторе, где на компе стоит WinXP. Которая там версия WinRAR, я отсюда не вижу. Конкретно этот кривой архив получился при скачивании папки с несколькими подпапками из облака Mail.ru. Если я скачивал один файл с русским именем, то оно не портилось (это облако все скачиваемые браузером файлы почему-то суем в архив -- но це, видимо, чисто фича.
Цитата: Upliner от августа 8, 2021, 16:39
Цитата: СНовосиба от августа 8, 2021, 15:06Так запакуйте файл с юникодным (хотя бы украинским) именем, и все будет.
Значит, посоветуете Хромису в каждый архив специально засовывать файл с украинским именем? Костыль конечно тот ещё...
Я поступил немного проще - требую от юзеров, чтобы они переименовывали файлы внутри папки латиницей, а потом архивировали. Это единственный 100% работающий способ независимо от ОС, браузеров и пр.
А если будет латиница с пробелами?
Да, в конторе была версия 3.30, поставил свежую, с русскими именами стало всё путем. Правда, в FAR'е крякозяблы так и таки остались. Но это. видимо, надо уже менять pkunzip.exe.