Page 1 of 1
Проблема с кодировками
Posted: Sat Mar 09, 2013 7:13 pm
by pmu800
Столкнулся со следующей проблемой и не знаю что делать.
Упрощенно выглядит так (Win7):
1. В Notepad пишем "это тест", сохраняем (кодировка по умолчанию - ANSI), закрываем
2. Открываем в Akelpad (кодировка по умолчанию - UTF8, но в настройках стоит "распознавать кодировки в тч 1251") - видим абракадабру
3. Наживаем в тексте добавить строку (ввод), сохраняем.
4. В результате имеем не читаемый ничем тест и я не могу его прочитать раскодировавщими - что делать?
UTF8 поставил из за плагина "autosave" - текст с web-страниц вставленный в редактор Akelpad приводил к краху всех открытых не сохраненных файлов если была по умолчанию кодировка 1251.
Как раскодировать текст и правильно настроить Akelpad?
Re: Проблема с кодировками
Posted: Mon Mar 11, 2013 9:20 am
by DV
При открытом файле, внизу, на статус-баре - там, где надписи Ins | Win | 65001 ( UTF-8 ) without BOM - нажимаем правую кнопку мыши на надписи "65001 ( UTF-8 ) without BOM" и в появившемся всплывающем меню выбираем Open As -> 1251 (ANSI - Cyrillic).
P.S. А иероглиф из "это тест" получается зачётный, да: ��沲
Posted: Tue Mar 12, 2013 6:22 pm
by pmu800
оно становиться еще забавнее, если выполнить п. 3 (или оно само выполниться при autosave) и попробовать потом прочитать файл указанным вами способом

Posted: Wed Mar 13, 2013 6:15 am
by Fr0sT
нажимаем правую кнопку мыши на надписи "65001 ( UTF-8 ) without BOM" и в появившемся всплывающем меню выбираем Open As -> 1251 (ANSI - Cyrillic)
Либо Alt+W
C преобразованием в/из utf8 всё строго: стоит один раз перегнать что-то не то, и данные потеряны. Это происходит потому, что в спеки кодировки встроена сигнатура символов, позволяющая отличать корректные utf8 символы от мусора, а АП, судя по всему, тихо глотает этот мусор.
Posted: Wed Mar 13, 2013 9:22 am
by pmu800
видимо так и есть, а все было бы хорошо, если бы АП тихо проглатывал юникод символы при сохранении в кодировке 1251 как это делает notepad.
Posted: Wed Mar 13, 2013 9:44 am
by DV
Fr0sT wrote:C преобразованием в/из utf8 всё строго
Кстати, да.
Последовательность символов "это тест" имеет следующие коды:
"FD F2 EE 20 F2 E5 F1 F2".
Стандарт UTF-8 чётко определяет, сколько байт относится к одному символу:
http://en.wikipedia.org/wiki/UTF-8
Согласно приведенной там табличке, байт 0xFD (0b11111101) является 1-м байтом символа из 6 байт
(по формуле 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx).
Следующий байт 0xF2 (0b11110010) уже не удовлетворяет условию "10xxxxxx" для второго байта в 6-байтном символе.
Получается, да, это явная ошибка в AkelPad.
Последовательность байт "FD F2" не является корректной последовательностью для UTF-8.
Posted: Wed Mar 13, 2013 1:30 pm
by Fr0sT
а все было бы хорошо, если бы АП тихо проглатывал юникод символы при сохранении в кодировке 1251 как это делает notepad
Да уж лучше бы ругался!