Странная кодировка текста (Это результат многократной перекодировки или что-то другое?)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Странная кодировка текста

Сообщение Hephaestus »

В общем, попался мне на глаза текст. Ну, скажем, вот

Кодировка весьма любопытная: вроде бы koi8-r - открывается и читается нормально,
но есть две проблемы:
1. Перепутан регистр символов. То есть все буквы, которые должны быть заглавными - строчные и наоборот.
2. Заглавный Ъ заменен на небуквенный символ.

Стало интересно, я попробовал воспроизвести цепочку перекодировок - не смог.

На первый взгляд - это бНОПНЯ, однако в бНОПНЯ перепутаны не только регистры, но и сами буквы.
А в текстах по сслылке буквы на своих местах, перепутан только регистр. И только у кириллистических символов.
При этом в Сети есть упоминания о том, что из этих файлов удавалось собрать нормальный pdf.
Я не очнень верю, что из данных исходников получится нормальный файл без корректировки.
И я склоняюсь к мнению, что имела место какая-то другая ошибка, а не только двойная/некорректная перекодировка.

Конечно, нет никакой проблемы прогнать это через tr, но интересно, как это вообще получилось.
Потому что порой попадается нечто подобное.
Да, на всякий случай замечу, что онлайн-декодеры в данном случае не помогли. Иначе бы я не спрашивал.

Итак, кто может просветить меня по данному вопросу?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Странная кодировка текста

Сообщение Bizdelnick »

Hephaestus писал:
02.10.2018 13:57
Кодировка весьма любопытная: вроде бы koi8-r - открывается и читается нормально,
но есть две проблемы
Вообще-то такое получается, если интерпретировать файл в CP-1251. Если он родом из 1978 года, сложно отследить историю всех надругательств над ним…
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Странная кодировка текста

Сообщение Hephaestus »

Bizdelnick писал:
02.10.2018 14:18
Вообще-то такое получается, если интерпретировать файл в CP-1251.
Не уловил. Можно чуть подробнее?
Bizdelnick писал:
02.10.2018 14:18
Если он родом из 1978 года, сложно отследить историю всех надругательств над ним…
1978 - это год появления TeX? Я думаю, файл не настолько старый.
Есть косвенные признаки, что это 1999-2000 год.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Странная кодировка текста

Сообщение Bizdelnick »

Hephaestus писал:
02.10.2018 14:30
Не уловил. Можно чуть подробнее?

Shell

% curl http://lib.ru/CTOTOR/KNUT/004-033.tex | iconv -f cp1251 | head
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 66834 0 66834 0 0 152k 0 --:--:-- --:--:-- --:--:-- 153k
\input style
\hyphenation{АВ-ТО-МО-БИ-ЛЕЙ}
%% 4
\UDC{681.142.2}
\vfill

тРЕТИЙ ТОМ ИЗВЕСТНОЙ МОНОГРАФИИ ОДНОГО ИЗ КРУПНЕЙШИХ АМЕРИКАНСКИХ СПЕЦИАЛИСТОВ ПО
ПРОГРАММИРОВАНИЮ д. кНУТА (ПЕРВЫЙ ТОМ ВЫШЕЛ В ИЗДАТЕЛЬСТВЕ \rlq{}мИР\rrq{} В 1976 Г.,
ВТОРОЙ---В 1977 Г.) СОСТОИТ ИЗ ДВУХ ЧАСТЕЙ: \rlq{}сОРТИРОВКА\rrq{} И \rlq{}пОИСК\rrq{}. в НИХ
ПОДРОБНО ИССЛЕДУЮТСЯ РАЗЛИЧНЫЕ АЛГОРИТМЫ ВНУТРЕННЕЙ И ВНЕШНЕЙ СОРТИРОВКИ, ИЗУЧАЮТСЯ
%
Hephaestus писал:
02.10.2018 14:30
1978 - это год появления TeX?
Это год выхода данного перевода, который, очевидно, как и оригинал, был свёрстан в TeX. Каким преобразованиям файл подвергался в дальнейшем — вряд ли возможно установить, но сомневаюсь, что это независимо выполненная кем-то ещё вёрстка.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Странная кодировка текста

Сообщение Hephaestus »

Bizdelnick писал:
02.10.2018 15:17
сомневаюсь, что это независимо выполненная кем-то ещё вёрстка
Вообще-то там указано имя и контакты человека, кто изготовил эти файлы.
И если только это не сотрудник издательства, тогда это самая что ни на есть независимая вёрстка.

Кроме того, там есть ещё одна книга (Дейкстра), TeX-файлы изготовлены тем же человеком, и здесь-то точно
независимая вёрстка, поскольку указано, что это OCR. При этом проблема с кодировкой - точно такая же: инверсия регистра кириллицы и замена твердого знака на небуквенный символ.

Что касается приведенной Вами команды. Здесь как раз и начинается самое интересное.
В моей системе вывод данной команды выглядит так:

Shell

curl http://lib.ru/CTOTOR/KNUT/004-033.tex | iconv -f cp1251 | head
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 66834 0 66834 0 0 505k 0 --:--:-- --:--:-- --:--:-- 505k
\input style
\hyphenation{бч-фп-нп-вй-мек}
%% 4
\UDC{681.142.2}
\vfill

Фтефйк фпн йъчеуфопк нпопзтбжйй пдопзп йъ лтхроекыйи бнетйлбоулйи урегйбмйуфпч рп
ртпзтбннйтпчбойа Д. Лохфб (ретчщк фпн чщыем ч йъдбфемшуфче \rlq{}Нйт\rrq{} ч 1976 з.,
чфптпк---ч 1977 з.) упуфпйф йъ дчхи юбуфек: \rlq{}Уптфйтпчлб\rrq{} й \rlq{}Рпйул\rrq{}. Ч ойи
рпдтпвоп йуумедхафус тбъмйюоще бмзптйфнщ чохфтеооек й чоеыоек уптфйтпчлй, йъхюбафус
А с указанием koi8-r так:

Shell

curl http://lib.ru/CTOTOR/KNUT/004-033.tex | iconv -f koi8-r | head
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 66834 0 66834 0 0 530k 0 --:--:-- --:--:-- --:--:-- 530k
\input style
\hyphenation{АВ-ТО-МО-БИ-ЛЕЙ}
%% 4
\UDC{681.142.2}
\vfill

тРЕТИЙ ТОМ ИЗВЕСТНОЙ МОНОГРАФИИ ОДНОГО ИЗ КРУПНЕЙШИХ АМЕРИКАНСКИХ СПЕЦИАЛИСТОВ ПО
ПРОГРАММИРОВАНИЮ д. кНУТА (ПЕРВЫЙ ТОМ ВЫШЕЛ В ИЗДАТЕЛЬСТВЕ \rlq{}мИР\rrq{} В 1976 Г.,
ВТОРОЙ---В 1977 Г.) СОСТОИТ ИЗ ДВУХ ЧАСТЕЙ: \rlq{}сОРТИРОВКА\rrq{} И \rlq{}пОИСК\rrq{}. в НИХ
ПОДРОБНО ИССЛЕДУЮТСЯ РАЗЛИЧНЫЕ АЛГОРИТМЫ ВНУТРЕННЕЙ И ВНЕШНЕЙ СОРТИРОВКИ, ИЗУЧАЮТСЯ
Понятно, что и то, и другое неправильно. Так в этом-то и вопрос: А как правильно?

При этом, если файл сохранить, получается следующее:

Shell

file 004-033.tex
004-033.tex: LaTeX document, ISO-8859 text
так в моей системе выглядят файлы в koi8-r

Shell

enca 004-033.tex
MS-Windows code page 1251
LF line terminators
однако здесь не koi8-r
То есть явно что-то напутали с кодировками.

Опять же, мне известно, что koi8-r и cp1251 перекодируются друг в друга простой перестановкой (пример с бНОПНЯ - тому подтверждение) и цикл в 20 последовательных одинаковых перекодировок даст исходный текст.
Поэтому неудивительно, что текст в koi8-r может в каких-то случаях идентифицироваться как cp1251 и наоборот.


Однако, если взять другой участок текста, то можно увидеть, что символ, заменяющий твердый знак, при перекодировке остается без изменений.
Spoiler

Shell

curl http://lib.ru/CTOTOR/KNUT/004-033.tex | head -51 | tail -8
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Îåô îõöäù çï÷ïòéôø ï ÷áöîïóôé óáíïê ïâìáóôé. Ðòáëôéþåóëé óïòôéòï÷ëá é ðïéóë ÷ ôïê
éìé éîïê íåòå ðòéóõôóô÷õàô ÷ï ÷óåè ðòéìïöåîéñè; ÷ þáóôîïóôé, ðòé ïâòáâïôëå âïìøûéè
ïâRåíï÷ äáîîùè üææåëôé÷îïóôø éíåîîï üôéè ïðåòáãéê ïðòåäåìñåô üææåëôé÷îïóôø, á éîïçäá é
òáâïôïóðïóïâîïóôø ÷óåê óéóôåíù. Ðïüôïíõ, ëáë óðòá÷åäìé÷ï ïôíåþáåô á÷ôïò, ëîéçá
áäòåóï÷áîá îå ôïìøëï óéóôåíîùí ðòïçòáííéóôáí, úáîéíáàýéíóñ òáúòáâïôëïê ðòïçòáíí
óïòôéòï÷ëé é ðïéóëá éîæïòíáãéé. Íïöîï óëáúáôø, þôï äïóôáôïþîï þåôëéå ðòåäóôá÷ìåîéñ ïâ
üôïê ïâìáóôé îõöîù ðòé òåûåîéé ìàâïê úáäáþé îá Ü×Í ëáë ïâñúáôåìøîùå üìåíåîôù
éóëõóóô÷á ðòïçòáííéòï÷áîéñ.
100 6998 0 6998 0 0 82329 0 --:--:-- --:--:-- --:--:-- 82329
curl: (23) Failed writing body (1194 != 1440)

Shell

curl http://lib.ru/CTOTOR/KNUT/004-033.tex | iconv -f cp1251 | head -51 | tail -8
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 66834 0 66834 0 0 462k 0 --:--:-- --:--:-- --:--:-- 462k
Оеф охцдщ зпчптйфш п чбцопуфй убнпк пвмбуфй. Ртблфйюеулй уптфйтпчлб й рпйул ч фпк
ймй йопк нете ртйухфуфчхаф чп чуеи ртймпцеойси; ч юбуфопуфй, ртй пвтбвпфле впмшыйи
пвRенпч дбоощи ьжжелфйчопуфш йнеооп ьфйи претбгйк пртедемсеф ьжжелфйчопуфш, б йопздб й
тбвпфпурпупвопуфш чуек уйуфенщ. Рпьфпнх, лбл уртбчедмйчп пфнеюбеф бчфпт, лойзб
бдтеупчбоб ое фпмшлп уйуфенощн ртпзтбннйуфбн, ъбойнбаэйнус тбътбвпфлпк ртпзтбнн
уптфйтпчлй й рпйулб йожптнбгйй. Нпцоп улбъбфш, юфп дпуфбфпюоп юефлйе ртедуфбчмеойс пв
ьфпк пвмбуфй охцощ ртй теыеойй мавпк ъбдбюй об ЬЧН лбл пвсъбфемшоще ьменеофщ
йулхууфчб ртпзтбннйтпчбойс.

Shell

curl http://lib.ru/CTOTOR/KNUT/004-033.tex | iconv -f koi8-r | head -51 | tail -8
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 66834 0 66834 0 0 553k 0 --:--:-- --:--:-- --:--:-- 548k
нЕТ НУЖДЫ ГОВОРИТЬ О ВАЖНОСТИ САМОЙ ОБЛАСТИ. пРАКТИЧЕСКИ СОРТИРОВКА И ПОИСК В ТОЙ
ИЛИ ИНОЙ МЕРЕ ПРИСУТСТВУЮТ ВО ВСЕХ ПРИЛОЖЕНИЯХ; В ЧАСТНОСТИ, ПРИ ОБРАБОТКЕ БОЛЬШИХ
ОБRЕМОВ ДАННЫХ ЭФФЕКТИВНОСТЬ ИМЕННО ЭТИХ ОПЕРАЦИЙ ОПРЕДЕЛЯЕТ ЭФФЕКТИВНОСТЬ, А ИНОГДА И
РАБОТОСПОСОБНОСТЬ ВСЕЙ СИСТЕМЫ. пОЭТОМУ, КАК СПРАВЕДЛИВО ОТМЕЧАЕТ АВТОР, КНИГА
АДРЕСОВАНА НЕ ТОЛЬКО СИСТЕМНЫМ ПРОГРАММИСТАМ, ЗАНИМАЮЩИМСЯ РАЗРАБОТКОЙ ПРОГРАММ
СОРТИРОВКИ И ПОИСКА ИНФОРМАЦИИ. мОЖНО СКАЗАТЬ, ЧТО ДОСТАТОЧНО ЧЕТКИЕ ПРЕДСТАВЛЕНИЯ ОБ
ЭТОЙ ОБЛАСТИ НУЖНЫ ПРИ РЕШЕНИИ ЛЮБОЙ ЗАДАЧИ НА эвм КАК ОБЯЗАТЕЛЬНЫЕ ЭЛЕМЕНТЫ
ИСКУССТВА ПРОГРАММИРОВАНИЯ.
И это уже не удаётся объяснить только неверной кодировкой.

Разумеется, я понимаю, что не всякую цепочку перекодировок можно "вертать назад", но я думал, а вдруг в данном случае есть ответ.
Когда-то раньше в Сети мне попадался похожий вопрос на каком-то форуме, и там человек отвечал, что определяет уже "на глаз" и объяснял примерную логику как ему удаётся восстановить цепочку. Только вот найти теперь не могу.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20795
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Странная кодировка текста

Сообщение Bizdelnick »

Hephaestus писал:
02.10.2018 20:29
Опять же, мне известно, что koi8-r и cp1251 перекодируются друг в друга простой перестановкой (пример с бНОПНЯ - тому подтверждение) и цикл в 20 последовательных одинаковых перекодировок даст исходный текст.
Поэтому неудивительно, что текст в koi8-r может в каких-то случаях идентифицироваться как cp1251 и наоборот.
enca так не обмануть: она ищет часто встречающиеся сочетания символов, а не просто отдельные символы. Регистр при этом, скорее всего, не учитывает.
Hephaestus писал:
02.10.2018 20:29
Когда-то раньше в Сети мне попадался похожий вопрос на каком-то форуме, и там человек отвечал, что определяет уже "на глаз" и объяснял примерную логику как ему удаётся восстановить цепочку.
Раньше была статья википедия://кракозябры с примерами неправильного перекодирования, но потом нехорошие люди её удалили.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Странная кодировка текста

Сообщение serzh-z »

Это просто у оригинального текста в KOI8-R восьмой бит обрезали (или сознательно сконвертировали в ASCII/KOI-7), а потом либо просто транслитерировали, либо попробовали восстановить восьмибитную KOI8-R.

P.S.: собственно, по отсутствию твердого знака можно понять.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Странная кодировка текста

Сообщение Hephaestus »

serzh-z писал:
02.10.2018 22:17
Это просто у оригинального текста в KOI8-R восьмой бит обрезали (или сознательно сконвертировали в ASCII/KOI-7), а потом либо просто транслитерировали, либо попробовали восстановить восьмибитную KOI8-R.
Да, это похоже на правду. Непонятно только, как удалось латинские символы превратить обратно в кириллицу, не затронув TeX-разметку.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
MiK13
Сообщения: 1180
ОС: Linux Debian

Re: Странная кодировка текста

Сообщение MiK13 »

Посмотрел текст. Решил попробовать преобразовать его командой iconv -f KOI-8
Программа "заткнулась: недопустимая входная последовательность в позиции 52581
Там оказалась буква ё. Причём строчная.
В предложении
оБРАТНУЮ ПЕРЕСТАНОВКУ ВПЕРВЫЕ ВВёЛ X. а. рОТЕ [В к.F.~Hindenburg(ed.).,
Удивило сочетание: "к.F" -- русская и латинская буквы. Также буква X в этом предложении латинская (Генрих Август Роте?)
Может быть текст был написано в ChiWriter'е? А потом русские буквы преобразовали в КОИ-8, добавив старший бит, но не учли, что в КОИ-7 строчные латинские буквы соответствуют заглавным русским и наоборот.

Кстати, интересный момент: mc нормально понимает буквы ё и Ё (коды 0xA3 и 0xB3) в кодировке КОИ-8. А вот iconv их почему-то не воспринимает.
С чем это может быть связано? Можно ли это исправить?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: Странная кодировка текста

Сообщение /dev/random »

MiK13 писал:
04.10.2018 23:34
Посмотрел текст. Решил попробовать преобразовать его командой iconv -f KOI-8
Программа "заткнулась: недопустимая входная последовательность в позиции 52581
Там оказалась буква ё. Причём строчная.
KOI-8 и KOI8-R - это разные кодировки. В последней есть Ё, в первой - нет.
Спасибо сказали:
Ответить