Переключение кодировок в редакторе гробит русские символы
Переключение кодировок в редакторе гробит русские символы
У меня есть некоторое количество файлов, в первых строках которых русский текст в utf-8 а далее в windows-1251 или cp866 (исходники из svn-а).
Редактор фара, открывает их в кодировке utf-8 - автораспознование включено.
Естественно строки в теле получаются нечитабельные.
Но вот при сохранении они превращаются в мусор.
Так же в мусор они превращаются, если сменить текущую кодировку файла на верную.
Т. е. для того, чтобы нормально редактировать такой файл нужно открыть, сменить кодировку на верную, закрыть и опять открыть.
Как-то это несколько напрягает.
П. С. Я уже запорол несколько файлов - хорошо что таки из свина можно восстановить...
Редактор фара, открывает их в кодировке utf-8 - автораспознование включено.
Естественно строки в теле получаются нечитабельные.
Но вот при сохранении они превращаются в мусор.
Так же в мусор они превращаются, если сменить текущую кодировку файла на верную.
Т. е. для того, чтобы нормально редактировать такой файл нужно открыть, сменить кодировку на верную, закрыть и опять открыть.
Как-то это несколько напрягает.
П. С. Я уже запорол несколько файлов - хорошо что таки из свина можно восстановить...
Буддизм Алмазного Пути, линия Карма Кагью.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Переключение кодировок в редакторе гробит русские символ
Но вот при сохранении они превращаются в мусор.
Вообще-то о том, что преобразование прошло с потерями - сообщается. И, там же, прямым текстом, белым по красному, написано, что "Сохранять файл не рекомендуется."Так же в мусор они превращаются, если сменить текущую кодировку файла на верную.
Т. е. ты из тех людей, которые "эти тупые сообщения этих тупых компьютеров" принципиально не читают?П. С. Я уже запорол несколько файлов - хорошо что таки из свина можно восстановить...
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: Переключение кодировок в редакторе гробит русские символ
Такие файлы могут считаться текстовыми лишь с большой натяжкой. Не нужно пытаться редактировать их текстовыми редакторами.Tonal wrote:У меня есть некоторое количество файлов, в первых строках которых русский текст в utf-8 а далее в windows-1251 или cp866 (исходники из svn-а).
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Переключение кодировок в редакторе гробит русские символ
Решается макросом.Tonal wrote:Т. е. для того, чтобы нормально редактировать такой файл нужно открыть, сменить кодировку на верную, закрыть и опять открыть.
Как-то это несколько напрягает.
Re: Переключение кодировок в редакторе гробит русские символ
Когда такой файл 1 - сообщение вполне работает.
А когда их много...
Какие-то ещё не открывал, какие-то открывал недавно и редактор ещё помнит кодировку, какие-то открывались давно, и редактор их кодировку уже забыл. (кстати, какой размер этого кеша и можно ли его изменить?)
Собственно напрягает два момента: то, что при смене кодировки на "правильную" строки остаются "битыми", и то, что при открытии и закрытии с сохранением файл "портится".
Кстати, при просмотре по F3 переключение в "правильную" кодировку делают строки читабельными.
Как мне кажется есть несколько решений ситуации:
И в исходнике, в строку $LastChangedDate: $ подставляется дата изменений.
Умный свин честно пишет дату на русском но в utf-8 не взирая на реальную кодировку исходника.
Раньше писал дату по английски и всё было в порядке...
А когда их много...
Какие-то ещё не открывал, какие-то открывал недавно и редактор ещё помнит кодировку, какие-то открывались давно, и редактор их кодировку уже забыл. (кстати, какой размер этого кеша и можно ли его изменить?)
Собственно напрягает два момента: то, что при смене кодировки на "правильную" строки остаются "битыми", и то, что при открытии и закрытии с сохранением файл "портится".
Кстати, при просмотре по F3 переключение в "правильную" кодировку делают строки читабельными.
Как мне кажется есть несколько решений ситуации:
- Забить, т. к. такие пользователи ССЗБ.
- Для строки которая не отображается в текущей кодировке сохранить её исходное байтовое представление и при сохранении или следующим изменении кодировки использовать именно его. (Тут следует отдельно проработать ситуацию что делать когда пользователь пытается изменять такую строку. Очевидных решений два: не давать или сбрасывать байтовое представление.)
- При открытии такого файла не только показывать большую красную табличку, но и переключать в режим ReadOnly.
- При сохранении Такого файла выдавать предупреждение о возможной потере данных.
- Перечитывать такие файлы при смене кодировки автоматом или дать возможность перечитать его вручную.
И в исходнике, в строку $LastChangedDate: $ подставляется дата изменений.
Умный свин честно пишет дату на русском но в utf-8 не взирая на реальную кодировку исходника.
Раньше писал дату по английски и всё было в порядке...
Буддизм Алмазного Пути, линия Карма Кагью.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Переключение кодировок в редакторе гробит русские символ
512. Можно, через техинфо.Tonal wrote:какой размер этого кеша и можно ли его изменить?
Редактор ничего не знает о байтовых представлениях. Он всегда работает в UTF16, всё открываемое преобразуется в UTF16.Для строки которая не отображается в текущей кодировке сохранить её исходное байтовое представление и при сохранении или следующим изменении кодировки использовать именно его.
Зачем? Может я как раз хочу открыть такой файл, чтобы из него эти нехорошие куски поудалять.При открытии такого файла не только показывать большую красную табличку, но и переключать в режим ReadOnly.
Логично, будет.При сохранении Такого файла выдавать предупреждение о возможной потере данных.
Возможность перечитать файл/передетектить кодовую страницу есть в планах (далёких).Перечитывать такие файлы при смене кодировки автоматом или дать возможность перечитать его вручную.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Переключение кодировок в редакторе гробит русские символ
Tonal
Проблема обсуждалась ещё год назад, см. 0000868: Порча текста при смене кодировки на "несовместимую"
(Как-нибудь добавлю этот, и другие макросы к уже опубликованным в теме Макросы для циклического переключения кодировок.)
Проблема обсуждалась ещё год назад, см. 0000868: Порча текста при смене кодировки на "несовместимую"
Уже сейчас всё это можно сделать макросом. Я именно так и сделал.Логично, будет.При сохранении Такого файла выдавать предупреждение о возможной потере данных.
(Как-нибудь добавлю этот, и другие макросы к уже опубликованным в теме Макросы для циклического переключения кодировок.)
Для справки: возможность автоматического определения кодировки файла по запросу обсуждалась в теме Редактор FAR2: Проблемы с переключением кодовых страниц.Возможность перечитать файл/передетектить кодовую страницу есть в планах (далёких).Перечитывать такие файлы при смене кодировки автоматом или дать возможность перечитать его вручную.
Re: Переключение кодировок в редакторе гробит русские символ
А при смене кодировки делается видимо примерно так:DrKnS wrote:Редактор ничего не знает о байтовых представлениях. Он всегда работает в UTF16, всё открываемое преобразуется в UTF16.Для строки которая не отображается в текущей кодировке сохранить её исходное байтовое представление и при сохранении или следующим изменении кодировки использовать именно его.
UTF16 -> SelectetCoding, SelectetCoding -> UTF16.
Тогда понятно почему строки "бьются".
Вот я и предложил сохранять исходные строки до преобразования в UTF16, в случае когда оно прошло с ошибками.
Ну да понятно, что это изрядно усложнит логику редактора...
Мне кажется, что такое требуется несколько реже.DrKnS wrote:Зачем? Может я как раз хочу открыть такой файл, чтобы из него эти нехорошие куски поудалять.При открытии такого файла не только показывать большую красную табличку, но и переключать в режим ReadOnly.
К тому же всегда можно явно переключится в RW.
П. С. Да, я часто открываю файлы редактором не для редактирования, а потому что в просмотрщике (F3) нет подсветки синтаксиса...
П. П. С. Тот же Kate из состава KDE при смене кодировки с UTF-8 на "правильную" корректно отображает правильные строки, хотя тоже работает в UTF-16. Интересно как там сделано...
Буддизм Алмазного Пути, линия Карма Кагью.
Re: Переключение кодировок в редакторе гробит русские символ
Про макросы: там же вроде utf как раз отрублен?
А проблема именно в utf ->ansi и обратно...
А проблема именно в utf ->ansi и обратно...
Буддизм Алмазного Пути, линия Карма Кагью.
Re: Переключение кодировок в редакторе гробит русские символ
я думаю что для работы с деревом используется инструмент по дереву, а для работы с металлом - инструмент по металлу.
тут, скорее, нужен плагин, который разделит файл на части по предполагаемым кодировкам, и предложит отредактировать их, после чего сошьет их как они должны были быть в исходном файле
тут, скорее, нужен плагин, который разделит файл на части по предполагаемым кодировкам, и предложит отредактировать их, после чего сошьет их как они должны были быть в исходном файле
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
Re: Переключение кодировок в редакторе гробит русские символ
Настрой систему, чтобы подставлялась дата в формате ISO 8601. Он языко- и кодировконезависим. Если svn при развороте ключевых слов не учитывает пользовательские региональные настройки — зафайли на них баг.Tonal wrote:Получаются такие файлы вполне просто: на исходник в свине ставишь свойство svn:keywords содержащее LastChangedDate.
И в исходнике, в строку $LastChangedDate: $ подставляется дата изменений.
И вообще, исходники должны быть в UTF-8, строки и комментарии в них — на английском. Если только это не lng- или help-файлы, которые всё равно должны быть в UTF-8, но на том языке, куда локализуем.
Называется head, tail и cat из пакета GNU coreutils. И iconv для приведения к одной кодировке.vkh wrote:тут, скорее, нужен плагин, который разделит файл на части по предполагаемым кодировкам, и предложит отредактировать их, после чего сошьет их как они должны были быть в исходном файле
Re: Переключение кодировок в редакторе гробит русские символ
Перевод большого старого проекта в другую кодировку - не самая простая и быстрая задача.Centaur wrote:И вообще, исходники должны быть в UTF-8, строки и комментарии в них — на английском. Если только это не lng- или help-файлы, которые всё равно должны быть в UTF-8, но на том языке, куда локализуем.
Буддизм Алмазного Пути, линия Карма Кагью.
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Переключение кодировок в редакторе гробит русские символ
Во время редактирования файла с русским текстом меняю кодировку на UTF-8 (случайно), получаю
Закрываю сообщения. Хочу выйти из файла без сохранения изменений, жму Esc.
Получаю предупреждение:
Оно мне тут не нужно, я ведь хочу закрыть файл без изменений, но ладно, жму Ok
И тут передо мной возникает уже подтверждение сохранения (от которого я тоже отказываюсь).
Выходит многовато предупреждений.
1) Нельзя ли сделать так, чтобы дополнительное предупреждение выдавалось не ДО диалога подтверждения, а ПОСЛЕ, т.е. только в том случае когда я действительно пытаюсь сохранить изменения.
2) В дополнительном предупреждении кнопка Cancel не нужна, и даже мешает, т. к. делает предупреждение назойливым. Имхо достаточно 1 раз предупредить пользователя.
3) А вот кнопка Reload была бы очень кстати, и наверно даже не при дополнительном подтверждении, а в самом первом:
Закрываю сообщения. Хочу выйти из файла без сохранения изменений, жму Esc.
Получаю предупреждение:
Code: Select all
╔════════════════ Warning ═════════════════╗
║ During file editing some data was lost. ║
║ It is not recommended to save this file. ║
║ OK Cancel ║
╚══════════════════════════════════════════╝
И тут передо мной возникает уже подтверждение сохранения (от которого я тоже отказываюсь).
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 чат
- John Doe
- Бюрократ
- Posts: 13861
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: Переключение кодировок в редакторе гробит русские символ
Осталась некоторая непоследовательность: в случае Esc/F10 предупреждение выводится ДО диалога сохранения, а в случае F2 - ПОСЛЕ.drkns 22.04.2010 21:11:09 +0200 - build 1518 wrote:Code: Select all
1. Уточнение 1517.5: предупреждение об ошибке преобразования выводилось и тогда, когда этого не требовалось.
Update
Это проявляется только с новым, ещё не записанном на диск файлом.
P.S.
#0001360: Дополнительное подтверждение сохранения иногда выводится невовремя
https://t.me/FarManager — Telegram чат
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Автоопределение кодовой страницы
Я бы предложил в подобных случаях делать перекодировку так же, как делается по ShiftF2 (предварительно запросив и получив согласие пользователя) . Нет потерь информации, и все довольны.