View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000868 | Wishes | Editor | public | 2009-05-18 17:32 | 2014-05-23 13:17 |
Reporter | JohnDoe | Assigned To | 2useven10 | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Summary | 0000868: Порча текста при смене кодировки на "несовместимую" | ||||
Description | Если при редактировании файла с русским текстом не_в_юникоде попытаться поменять кодировку на UTF8, то фар выдаёт warning: This file contains characters, which cannot be correctly translated using the selected codepage. It is not recommended to save this file. Спасибо конечно за предупреждение, но текст-то уже безнадёжно испорчен - отменить преобразование невозможно. | ||||
Additional Information | Возможны разные варианты решения Например 1) Не менять кодировку до явного сохранения по F2 (возможно при этом стоит выдать ворнинг повторно) 2) Сделать в ворнинге выбор кодировки 3) Добавить в ворнинг кнопку отмены Последний вариант наиболее прост, но наименее удобен | ||||
Tags | No tags attached. | ||||
Build | 2797 | ||||
related to | 0001773 | closed | vskirdin | Far Manager | Дадим возможность разрешать пункт AutoDetect в меню по Shift-F8 |
has duplicate | 0002354 | closed | 2useven10 | Far Manager | Проблема с кодировками в редакторе. Файл в 1251 открывается в UTF-8 и при переключении в 2151 козябры |
related to | 0001775 | closed | vskirdin | Wishes | Shift-F4: Возможность пере-автоопределения кодировки при открытии файла |
related to | 0002250 | closed | 2useven10 | Far Manager | Непоказ текста в 1251 внутри файла в UTF8 |
related to | 0002684 | closed | 2useven10 | Wishes | Возможность смены кодировки путём перечитывания файла |
|
Нефиг так делать, с какого перепугу ты вообще полез на utf-8 менять. |
|
Интересная реакция на багрепорт :-) Во-первых, можно и без перепугу - случайно. Запросто можно промахнуться. И мышью, и клавиатурой. Во-вторых лично я наткнулся на баг в процессе циклического перебора кодировок (макросом назначенным на F9) ShiftF8 Down Enter Очень было бы удобно, да баг помешал... |
|
Хочу поспорить насчёт терминов Bug/Wish Текст необратимо портится , не давая пользователю отменить преобразование - это самый настоящий баг. Примерно как если бы при копировании файлов диалог предупреждающий о замене файла выдавался бы уже после факта перезаписи. И насколько я понимаю выбрать UTF-8 - не единственный способ получить "несовместимую" кодировку. |
|
"Спасибо конечно за предупреждение, но текст-то уже безнадёжно испорчен - отменить преобразование невозможно." Возможно, если файл не сохраняли после сообщения об ошибке :) Возвращаем правильную кодировку, выходим из файла не сохраняя его, возвращаемся назад в файл - всё на месте. Если же не возвращать кодировку назад, при попытке войти в файл выдаётся всё то же сообщение "This file contains..." А вот если сохранить изменения в файле, тогда русский текст действительно портится безвозвратно, и это плохо, явно надо проверять возможность/корректность преобразования до его выполнения |
|
Проверять до не реально, ибо тогда тормоза ибо проверка==перекодировка, т.е. предёт два раза перекодировать. Что да можно это предупреждать до смены что то типа "ты дыбил, нафига сюда полез!". |
|
"Что да можно это предупреждать до смены что то типа "ты дыбил, нафига сюда полез!". " Неудобно, надо будет либо вести "чёрный список" преобразований (из ansi в utf8 ни-ни), либо выводить предупреждение при каждой смене кодировки, что явно будет раздражать, предупреждение будут отключать и периодически наступать на грабли, ругая разработчиков. Собственно, основная проблема в том, что если ты внёс изменения в файл, и случайно промазал (или макросом изменил) кодировку, ты теряешь возможность сохранить изменения и приходится выполнять ту же работу дважды. Но вообще возникает вопрос - а как, собственно, должен выглядеть файл в oem/ansi, при отображении его в виде utf8, ведь даже в редакторе мы только меняем представление файла? PS: Провёл ещё эксперимент - показ UTF8 в oem/ansi работает корректно |
|
Редактор хранит текст тока в юникоде - для смены кодировки весь этот текст нужно: 1. перекодировать из юникода в оригинальную 2. перекодировать из ново выбраной в юникод. |
|
>Возможно, если файл не сохраняли после сообщения об ошибке :) До перекодировки файл может уже иметь несохранённые изменения - и все они потеряются. Учитывая потенциальную "деструктивность" можно конечно сделать "принудительное" сохранение... >Проверять до не реально, ибо тогда тормоза А куда мы торопимся-то? Неужели полсекунды ожидания важнее сохранности данных? Тем более смена кодировки - разовая операция. >Что да можно это предупреждать до смены Так это значит что F8 нельзя будет нажать без того чтоб тебя дыбилом не обозвали? |
|
>Что да можно это предупреждать до смены Ещё можно хранить список потенциально несовместимых кодировок |
|
Можно запретить переходить из однобайтовых в другие (как и нет щас перехода в юникодные кодировки например) но это не удобно. Нужно понимать что текст который в однобайтовой кодировке, ну ни как не может нормально перекодироватся в UTF-8. F8 тут не причём, порча может быть только при переходе в UTF8 если текст в файле совсем не UTF8. |
|
>Нужно понимать что текст который в однобайтовой кодировке, ну ни как не может нормально перекодироватся в UTF-8. Естественно. Но бывает довольно часто сразу не понятно что текст в UTF-8, и открываем файл в однобайтной кодировке, а уже потом переключаемся в UTF-8 - и наоборот. (а макрос для того чтобы автоматизировать это дело) Имхо двойное перекодирование - меньшее зло |
|
Ну так для этого случая и проблемы нет. Проблема она тока когда на UTF8 текст пытаешся открыть как UTF8 - а тут сам себе злобный буратино. |
|
Либо реализовать отмену - по CtrlZ. Подозреваю что накладных расходов будет больше чем при двойном перекодировании... |
|
Как вариант произвести преобразование в новый объект (структуру? не программер я, не в курсе), произвести проверку на корректность, если возникли потери выводим красное окно с предупреждением, при утвердительном ответе убираем оригинальный вариант, оставляя преобразованный, при отрицательном возвращаем оригинал и кодировку, и удаляем результат преобразований |
|
2PX - накладных расходов больше чем при двойном перекодировании >Проблема она тока когда не-UTF8 текст пытаешся открыть как UTF8 - а тут сам себе злобный буратино. Проблема в том что иногда не понятно что с текстом не так - логично при этом пытаться сменить кодировку. И логично не заставлять пользователя вникать в тонкости реализации перекодирования в фаре, и в случае если он напортачил по неведению - позволить отмену, а не называть его буратиной. Кстати кодировка-то запоминается. И после ошибочного выбора UTF-8 файл опять откроется с потерями. И надо будет плясать чтобы открыть его нормально. Не юзерфрендли всё это У нас же не EDLIN |
|
Хочу подвести итоги: Выяснилось что сама по себе "несовместимость" кодировок между собой не страшна, поскольку редактор хранит текст в юникоде. Поэтому тикет на самом деле должен быть сформулирован так: 0000868: Выбор кодовой страницы: портится текст при открытии неюникодного текста в юникоде Поскольку проблема сужается, то почему бы действительно при выборе UTF-8 не пренебречь накладными расходами и не осуществить дополнительную проверку? |
|
А если файл большой? |
|
"А если файл большой?" То ругани в случае его повреждения будет много :))) |
|
Тормоза будут проявляться только при конвертации в UTF, а это не так часто приходится делать. К тому же - насколько большим должен быть файл, чтобы ощутить эти тормоза? |
|
развезли тут на 19 топиков непонятно чего ;) все намного проще можно сделать - warning нужно показывать до применения кодировки, а-ля: is a read-only file Do you wish to edit it? Yes No плюс можно в этот диалог впихнуть первую попавшуюся строку с примером, что мы получим от такой операции. |
|
2samlyukov 1)Намного проще не совсем получается по причине изложенной в 5-м ноуте 2)Первая попавшаяся строка с примером может быть не показательна например в случае если перекодировка затрагивает только кириллицу А вот в случае облома - да, интересно было бы знать в какой строке и на каком символе он произошёл |
|
Сообщение о несовместимости кодировок появляется не только при попытке смены, но и сразу при открытии файла (F4, или открытие редактора каким-либо плагином). Так бывает не только если явно задавать кодировку через ShiftF4, но и в случае когда кодировка была запомнена с прошлого раза. (а в прошлый раз на том месте мог быть вообще другой файл) И приходится делать всякие странные и неочевидные телодвижения чтобы открыть файл в правильной кодировке. |
|
В свете 0001773 (AutoDetect в меню по Shift-F8) проблема порчи текста актуализировалась. Ведь до этого можно было сказать что юзер "сам дурак" что выбрал несовместимую кодировку. Теперь же выбирает не юзер, а фар, и более того: для него не действует "табу" переключения между одно/много-байтными кодировками. Предлагаю реализовать возможность отмены операции смены кодировки через UNDO. Учитывая, что это ресурсоёмко, предлагаю поставить ограничение на размер файла: в случае если файл большой надо предложить юзеру предварительно сохранить изменения. |
|
Тикет в целом вроде бы решён. Можно закрыть, проставив связь с 0001773 Один вопрос: как именно производится проверка? |
|
смена кодировки делается в два приема: сначала проверка без реальной замены, если при этом используются 'дефолтовые символы' - значит плохо. потом, если всё ок, или замена подтверждена - собственно перекодировка. |
|
2613 |
|
Выше (0000868:0003165) высказывались опасения, что "двойная" работа приведёт к "тормозам". Есть мнение ((0000868:0003172) что такую проверку надо делать не всегда, а только при переключении в UTF-8. А вы как думаете? |
|
Для файлов, которые имеет смысл редактировать - несущественно. Измерил на своей машине, для гигабайтного файла (нормальный человек f4 давить не будет): проверка около 3сек, переключение от 5 до 11 сек (в зависимости от направления и фазы луны). Вполне приемлемо. |
|
>Измерил на своей машине Четырёхядерник с 16Г памяти? ;-) >от 5 до 11 сек Даже 0,25 секунды ощутимо. На слабой машине для такой задержки не понадобится гигабайтный файл. Может всё-таки стоит оптимизировать? |
|
8-ми с 12-ю, но это не важно, перекодированием занимается одно ядро. не стоит. на слабой машине никто не будет редактировать гигабайтный (и даже гораздо меньший) файл - пока он загрузится 8 раз передумаешь. а если есть такая небходимость - лишние 3 секунды погоды не сделают. |
|
Дублирую из 0001773:0007044. Если фар обнаруживает, что перекодировка невозможна, то выдаётся такое предупреждение: Editor contains characters, which cannot be correctly translated using selected codepage. Continue? ─────────────────────────────────────────────── { OK } [ Cancel ] Тут хотелось бы видеть ещё и кнопку [ Show ], позволяющую перейти к проблемному месту в тексте. Ещё: не лучше ли сделать кнопкой по умолчанию [ Cancel ] ? |
|
2797 - [Show] |
|
что осталось: 1) кнопка [Change Codepage] при открытии файла в неправильной кодировке (содержит символы, которые невозможно корректно ...). 2) дать возможность перечитывать файл при смене кодировки по Shift-F8 и таким образом снять, например, ограничения по смене юникод-неюникод кодировок. добавьте, если что-то пропустил... |
|
2useven10 1) http://bugs.farmanager.com/view.php?id=2250#c12247 2) http://bugs.farmanager.com/view.php?id=2684 А данный тикет можно закрыть |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-05-18 17:32 | JohnDoe | New Issue | |
2009-05-18 18:31 | alexy | Note Added: 0003157 | |
2009-05-18 21:31 | JohnDoe | Note Added: 0003159 | |
2009-05-18 22:17 | DrKnS | Project | Far Manager => Wishes |
2009-05-19 09:17 | JohnDoe | Note Added: 0003163 | |
2009-05-19 10:55 | Px | Note Added: 0003164 | |
2009-05-19 10:57 | alexy | Note Added: 0003165 | |
2009-05-19 11:08 | Px | Note Added: 0003166 | |
2009-05-19 11:15 | alexy | Note Added: 0003167 | |
2009-05-19 11:16 | JohnDoe | Note Added: 0003168 | |
2009-05-19 11:19 | JohnDoe | Note Added: 0003169 | |
2009-05-19 11:27 | alexy | Note Added: 0003170 | |
2009-05-19 12:23 | JohnDoe | Note Added: 0003171 | |
2009-05-19 12:26 | alexy | Note Added: 0003172 | |
2009-05-19 12:30 | JohnDoe | Note Added: 0003173 | |
2009-05-19 12:36 | Px | Note Added: 0003174 | |
2009-05-19 12:36 | JohnDoe | Note Added: 0003175 | |
2009-05-19 12:37 | JohnDoe | Note Edited: 0003175 | |
2009-05-19 12:40 | JohnDoe | Note Edited: 0003175 | |
2009-05-19 15:55 | JohnDoe | Note Added: 0003176 | |
2009-05-19 16:03 | alexy | Note Added: 0003177 | |
2009-05-19 16:26 | Px | Note Added: 0003178 | |
2009-05-19 16:36 | JohnDoe | Note Added: 0003179 | |
2009-05-19 17:11 | samlyukov | Note Added: 0003180 | |
2009-05-20 14:09 | JohnDoe | Note Added: 0003184 | |
2009-05-20 14:23 | JohnDoe | Note Added: 0003186 | |
2011-05-23 15:49 | JohnDoe | Note Added: 0007012 | |
2012-04-19 15:37 | JohnDoe | Note Added: 0008972 | |
2012-04-19 15:41 | JohnDoe | Note Edited: 0008972 | |
2012-04-19 19:06 | 2useven10 | Note Added: 0008976 | |
2012-04-19 19:12 | 2useven10 | Relationship added | related to 0001773 |
2012-04-19 19:15 | 2useven10 | Note Added: 0008977 | |
2012-04-19 19:15 | 2useven10 | Assigned To | => 2useven10 |
2012-04-19 19:15 | 2useven10 | Status | new => feedback |
2012-04-20 10:15 | JohnDoe | Note Added: 0008982 | |
2012-04-20 10:15 | JohnDoe | Status | feedback => assigned |
2012-04-24 19:29 | 2useven10 | Note Added: 0009045 | |
2012-04-24 19:34 | 2useven10 | Note Edited: 0009045 | |
2012-04-25 03:21 | 2useven10 | Note Edited: 0009045 | |
2012-04-25 07:47 | JohnDoe | Note Added: 0009046 | |
2012-04-25 08:00 | 2useven10 | Note Added: 0009048 | |
2012-04-29 18:41 | 2useven10 | Note Edited: 0009048 | |
2012-05-17 12:36 | JohnDoe | Note Added: 0009223 | |
2012-09-11 14:35 | 2useven10 | Note Added: 0009507 | |
2012-09-11 14:35 | 2useven10 | Status | assigned => feedback |
2013-02-03 00:33 | alexy | Severity | minor => feature |
2013-04-01 12:10 | 2useven10 | Relationship added | related to 0002354 |
2013-04-01 12:38 | 2useven10 | Relationship added | related to 0001775 |
2013-04-05 18:22 | 2useven10 | Note Added: 0010681 | |
2013-04-05 18:22 | 2useven10 | Relationship replaced | has duplicate 0002354 |
2013-04-05 18:37 | 2useven10 | Status | feedback => assigned |
2013-04-08 01:34 | 2useven10 | Note Edited: 0010681 | |
2013-05-08 12:27 | 2useven10 | Relationship added | related to 0002250 |
2014-05-23 12:51 | JohnDoe | Note Added: 0012426 | |
2014-05-23 13:16 | 2useven10 | Relationship added | related to 0002684 |
2014-05-23 13:17 | 2useven10 | Build | => 2797 |
2014-05-23 13:17 | 2useven10 | Status | assigned => closed |
2014-05-23 13:17 | 2useven10 | Resolution | open => fixed |