Ситуация сложилась презабавная. При копировании строки, содержащейся в некоем элементе GUI некой программы, в.. да куда угодно, получается немыслимая абракадабра.
Пример
îòïðàâëÿåòñÿ
и это кирилица..
Прямым перебором наиболее вероятных кодировок обуздать эту ахинею не смогли не браузеры ни связка человек+iconv
Встал вопрос чтоже это было изначально. Ну и как водится после непродолжительного гугления была нарыта пара рецептов.
1. http://www.artlebedev.ru/tools/decoder/
2. enca
первый заявил:
Как нам пришлось помучиться
CP1252 → CP1251второй сказал:
# echo 'îòïðàâëÿåòñÿ' | enca
Universal transformation format 8 bits; UTF-8
Doubly-encoded to UTF-8 from ISO-8859-5
чем еще более запутал ситуацию. Прямое преобразование по любой из этих рекомендаций не дает положительного результата. Однако немного помудившись суть вещей таки была выяснена
а дело в следующем. îòïðàâëÿåòñÿ - это уже юникод соответственно если применить преобразование вида
echo 'îòïðàâëÿåòñÿ' | iconv -fUTF8 -tCP1252 | iconv -fCP1251 -tUTF8
то получим нормальную человеческую азбуку.
т.е. похоже декодер лебедева имел ввиду что данные имеющие кодировку CP1251 отобразили как CP1252.
Рассуждения enca по этому поводу я вообще не понял. И двойная трансформация из UTF-8 в ISO-8859-5 не проходит. Однако без ее подсказки о том что это уже UTF-8 я б не догадался до такого извращенного метода трансформации.
Очень спасибо, эта фигня встречается в Libreoffice и файлами Excel
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьСпасибо. Очень помог такой подход. У меня artlebedev выдавал CP1252 → CP866 и enca "Universal transformation format 8 bits; UTF-8". Сделал по аналогии с вашим решением и все получилось.
ОтветитьУдалить