Переключение кодировок в редакторе гробит русские символы

Хотите говорить о Far и не знаете, куда обратиться?
Tonal
Posts: 73
Joined: Sat 27 Oct, 2007 14:42
Location: Новосибирск
Contact:

Переключение кодировок в редакторе гробит русские символы

Post by Tonal »

У меня есть некоторое количество файлов, в первых строках которых русский текст в utf-8 а далее в windows-1251 или cp866 (исходники из svn-а).
Редактор фара, открывает их в кодировке utf-8 - автораспознование включено.
Естественно строки в теле получаются нечитабельные.
Но вот при сохранении они превращаются в мусор.
Так же в мусор они превращаются, если сменить текущую кодировку файла на верную.

Т. е. для того, чтобы нормально редактировать такой файл нужно открыть, сменить кодировку на верную, закрыть и опять открыть.
Как-то это несколько напрягает.

П. С. Я уже запорол несколько файлов - хорошо что таки из свина можно восстановить...
Буддизм Алмазного Пути, линия Карма Кагью.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Переключение кодировок в редакторе гробит русские символ

Post by DrKnS »

Но вот при сохранении они превращаются в мусор.
Так же в мусор они превращаются, если сменить текущую кодировку файла на верную.
Вообще-то о том, что преобразование прошло с потерями - сообщается. И, там же, прямым текстом, белым по красному, написано, что "Сохранять файл не рекомендуется."
П. С. Я уже запорол несколько файлов - хорошо что таки из свина можно восстановить...
Т. е. ты из тех людей, которые "эти тупые сообщения этих тупых компьютеров" принципиально не читают?
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: Переключение кодировок в редакторе гробит русские символ

Post by Centaur »

Tonal wrote:У меня есть некоторое количество файлов, в первых строках которых русский текст в utf-8 а далее в windows-1251 или cp866 (исходники из svn-а).
Такие файлы могут считаться текстовыми лишь с большой натяжкой. Не нужно пытаться редактировать их текстовыми редакторами.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by John Doe »

Tonal wrote:Т. е. для того, чтобы нормально редактировать такой файл нужно открыть, сменить кодировку на верную, закрыть и опять открыть.
Как-то это несколько напрягает.
Решается макросом.
Tonal
Posts: 73
Joined: Sat 27 Oct, 2007 14:42
Location: Новосибирск
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by Tonal »

Когда такой файл 1 - сообщение вполне работает.
А когда их много...
Какие-то ещё не открывал, какие-то открывал недавно и редактор ещё помнит кодировку, какие-то открывались давно, и редактор их кодировку уже забыл. (кстати, какой размер этого кеша и можно ли его изменить?)

Собственно напрягает два момента: то, что при смене кодировки на "правильную" строки остаются "битыми", и то, что при открытии и закрытии с сохранением файл "портится". :(

Кстати, при просмотре по F3 переключение в "правильную" кодировку делают строки читабельными.

Как мне кажется есть несколько решений ситуации:
  • Забить, т. к. такие пользователи ССЗБ. :)
  • Для строки которая не отображается в текущей кодировке сохранить её исходное байтовое представление и при сохранении или следующим изменении кодировки использовать именно его. (Тут следует отдельно проработать ситуацию что делать когда пользователь пытается изменять такую строку. Очевидных решений два: не давать или сбрасывать байтовое представление.)
  • При открытии такого файла не только показывать большую красную табличку, но и переключать в режим ReadOnly.
  • При сохранении Такого файла выдавать предупреждение о возможной потере данных.
  • Перечитывать такие файлы при смене кодировки автоматом или дать возможность перечитать его вручную.
П. С. Получаются такие файлы вполне просто: на исходник в свине ставишь свойство svn:keywords содержащее LastChangedDate.
И в исходнике, в строку $LastChangedDate: $ подставляется дата изменений.
Умный свин честно пишет дату на русском но в utf-8 не взирая на реальную кодировку исходника. :(
Раньше писал дату по английски и всё было в порядке...
Буддизм Алмазного Пути, линия Карма Кагью.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Переключение кодировок в редакторе гробит русские символ

Post by DrKnS »

Tonal wrote:какой размер этого кеша и можно ли его изменить?
512. Можно, через техинфо.
Для строки которая не отображается в текущей кодировке сохранить её исходное байтовое представление и при сохранении или следующим изменении кодировки использовать именно его.
Редактор ничего не знает о байтовых представлениях. Он всегда работает в UTF16, всё открываемое преобразуется в UTF16.
При открытии такого файла не только показывать большую красную табличку, но и переключать в режим ReadOnly.
Зачем? Может я как раз хочу открыть такой файл, чтобы из него эти нехорошие куски поудалять.
При сохранении Такого файла выдавать предупреждение о возможной потере данных.
Логично, будет.
Перечитывать такие файлы при смене кодировки автоматом или дать возможность перечитать его вручную.
Возможность перечитать файл/передетектить кодовую страницу есть в планах (далёких).
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by John Doe »

Tonal

Проблема обсуждалась ещё год назад, см. 0000868: Порча текста при смене кодировки на "несовместимую"
При сохранении Такого файла выдавать предупреждение о возможной потере данных.
Логично, будет.
Уже сейчас всё это можно сделать макросом. Я именно так и сделал.
(Как-нибудь добавлю этот, и другие макросы к уже опубликованным в теме Макросы для циклического переключения кодировок.)
Перечитывать такие файлы при смене кодировки автоматом или дать возможность перечитать его вручную.
Возможность перечитать файл/передетектить кодовую страницу есть в планах (далёких).
Для справки: возможность автоматического определения кодировки файла по запросу обсуждалась в теме Редактор FAR2: Проблемы с переключением кодовых страниц.
Tonal
Posts: 73
Joined: Sat 27 Oct, 2007 14:42
Location: Новосибирск
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by Tonal »

DrKnS wrote:
Для строки которая не отображается в текущей кодировке сохранить её исходное байтовое представление и при сохранении или следующим изменении кодировки использовать именно его.
Редактор ничего не знает о байтовых представлениях. Он всегда работает в UTF16, всё открываемое преобразуется в UTF16.
А при смене кодировки делается видимо примерно так:
UTF16 -> SelectetCoding, SelectetCoding -> UTF16.
Тогда понятно почему строки "бьются".
Вот я и предложил сохранять исходные строки до преобразования в UTF16, в случае когда оно прошло с ошибками.
Ну да понятно, что это изрядно усложнит логику редактора...
DrKnS wrote:
При открытии такого файла не только показывать большую красную табличку, но и переключать в режим ReadOnly.
Зачем? Может я как раз хочу открыть такой файл, чтобы из него эти нехорошие куски поудалять.
Мне кажется, что такое требуется несколько реже. :)
К тому же всегда можно явно переключится в RW.

П. С. Да, я часто открываю файлы редактором не для редактирования, а потому что в просмотрщике (F3) нет подсветки синтаксиса...
П. П. С. Тот же Kate из состава KDE при смене кодировки с UTF-8 на "правильную" корректно отображает правильные строки, хотя тоже работает в UTF-16. Интересно как там сделано... :)
Буддизм Алмазного Пути, линия Карма Кагью.
Tonal
Posts: 73
Joined: Sat 27 Oct, 2007 14:42
Location: Новосибирск
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by Tonal »

Про макросы: там же вроде utf как раз отрублен?
А проблема именно в utf ->ansi и обратно...
Буддизм Алмазного Пути, линия Карма Кагью.
User avatar
vkh
Posts: 226
Joined: Fri 13 Nov, 2009 07:48
Has thanked: 2 times
Been thanked: 1 time

Re: Переключение кодировок в редакторе гробит русские символ

Post by vkh »

я думаю что для работы с деревом используется инструмент по дереву, а для работы с металлом - инструмент по металлу.
тут, скорее, нужен плагин, который разделит файл на части по предполагаемым кодировкам, и предложит отредактировать их, после чего сошьет их как они должны были быть в исходном файле
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: Переключение кодировок в редакторе гробит русские символ

Post by Centaur »

Tonal wrote:Получаются такие файлы вполне просто: на исходник в свине ставишь свойство svn:keywords содержащее LastChangedDate.
И в исходнике, в строку $LastChangedDate: $ подставляется дата изменений.
Настрой систему, чтобы подставлялась дата в формате ISO 8601. Он языко- и кодировконезависим. Если svn при развороте ключевых слов не учитывает пользовательские региональные настройки — зафайли на них баг.

И вообще, исходники должны быть в UTF-8, строки и комментарии в них — на английском. Если только это не lng- или help-файлы, которые всё равно должны быть в UTF-8, но на том языке, куда локализуем.
vkh wrote:тут, скорее, нужен плагин, который разделит файл на части по предполагаемым кодировкам, и предложит отредактировать их, после чего сошьет их как они должны были быть в исходном файле
Называется head, tail и cat из пакета GNU coreutils. И iconv для приведения к одной кодировке.
Tonal
Posts: 73
Joined: Sat 27 Oct, 2007 14:42
Location: Новосибирск
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by Tonal »

Centaur wrote:И вообще, исходники должны быть в UTF-8, строки и комментарии в них — на английском. Если только это не lng- или help-файлы, которые всё равно должны быть в UTF-8, но на том языке, куда локализуем.
Перевод большого старого проекта в другую кодировку - не самая простая и быстрая задача.
Буддизм Алмазного Пути, линия Карма Кагью.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by John Doe »

Во время редактирования файла с русским текстом меняю кодировку на UTF-8 (случайно), получаю
Закрываю сообщения. Хочу выйти из файла без сохранения изменений, жму Esc.
Получаю предупреждение:

Code: Select all

╔════════════════ Warning ═════════════════╗
║ During file editing some data was lost.  ║
║ It is not recommended to save this file. ║
║                OK  Cancel                ║
╚══════════════════════════════════════════╝
Оно мне тут не нужно, я ведь хочу закрыть файл без изменений, но ладно, жму Ok
И тут передо мной возникает уже подтверждение сохранения (от которого я тоже отказываюсь).

Code: Select all

╔═══════════════ Editor ════════════════╗
║        File has been modified         ║
║  Save  Do not save  Continue editing  ║
╚═══════════════════════════════════════╝
Выходит многовато предупреждений.
1) Нельзя ли сделать так, чтобы дополнительное предупреждение выдавалось не ДО диалога подтверждения, а ПОСЛЕ, т.е. только в том случае когда я действительно пытаюсь сохранить изменения.
2) В дополнительном предупреждении кнопка Cancel не нужна, и даже мешает, т. к. делает предупреждение назойливым. Имхо достаточно 1 раз предупредить пользователя.
3) А вот кнопка Reload была бы очень кстати, и наверно даже не при дополнительном подтверждении, а в самом первом:

Code: Select all

╔═══════════════════ Warning ═══════════════════╗
║  Editor contains characters, which cannot be  ║
║ correctly translated using selected codepage. ║
║   It is not recommended to save this file.    ║
║                OK    Reload                   ║
╚═══════════════════════════════════════════════╝
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Переключение кодировок в редакторе гробит русские символ

Post by John Doe »

drkns 22.04.2010 21:11:09 +0200 - build 1518 wrote:

Code: Select all

1. Уточнение 1517.5: предупреждение об ошибке преобразования выводилось и тогда, когда этого не требовалось.
Осталась некоторая непоследовательность: в случае Esc/F10 предупреждение выводится ДО диалога сохранения, а в случае F2 - ПОСЛЕ.

Update
Это проявляется только с новым, ещё не записанном на диск файлом.

P.S.
#0001360: Дополнительное подтверждение сохранения иногда выводится невовремя
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Автоопределение кодовой страницы

Post by Shmuel »

Я бы предложил в подобных случаях делать перекодировку так же, как делается по ShiftF2 (предварительно запросив и получив согласие пользователя) . Нет потерь информации, и все довольны.
Post Reply

Return to “Обсуждение Far Manager”