Можно ли справиться с этой хреновиной?

Аватар пользователя tvnic

Имеется htm-файл на английском. В большинстве текст нормальный, но частенько встречаются такого типа слова
purée
AdnaÃ
Fénechus
Nessán
и т.д.
Они поддаются расшифровке или восстановлению?

Комментарии

Это французские слова с диакритическими знаками, после каких-то заморочек с кодировкой. Можно попробовать разобраться через translate.google.com — поставить пару английский-французский и кормить ломанными словами по одному.
purée — это purée, Nessán — Nessán, а Fénechus — Fénechus.
Когда станет понятен алгоритм заморочек, например, é — это é, можно запустить глобальную замену по тексту.

Аватар пользователя tvnic

А вот за совет спасибочки. Получается. Только беда - не всё.
Здесь, например, никакой закономерности не нашел.
Adnaí
Uí
díguin
snádud
dálaigh
degree of Clí

А может в другом формате поискать?

Аватар пользователя sd

Lyka написал:
А может в другом формате поискать?

Или попробуйте текстовой поиск - скопируйте часть текста рядом с крякозябром, вставьте в строку поиска в браузере и закавычьте.
Аватар пользователя tvnic

sd написал:
Lyka написал:
А может в другом формате поискать?
скопируйте часть текста рядом с крякозябром, вставьте в строку поиска в браузере и закавычьте.

Пробовал это дело. Нормального варианта поиск не находит.
Аватар пользователя Drunkenmunky

tvnic написал:
никакой закономерности не нашел.

Это результат неправильных действий при copy\paste
Когда текст в кодировке ср1252 отображался например в кодировке ANSI
Его не глядя скопировали в документ в Юникоде например.
То есть необходимо создать HTML-документ с правильной кодировкой и, вставить в него соответствующие заголовки касаемо кодировки, и в браузере в меню "вид>кодировка" перебрать варианты.
Когда символы примут аналогичный в проблемном тексте вид, вы и получите закономерность.
Аватар пользователя golma1

Для облегчения поиска правильной кодировки можно попробовать воспользоваться хабровской таблицей:

https://habrahabr.ru/post/147843/

Аватар пользователя tvnic

golma1 написал:
Для облегчения поиска правильной кодировки можно попробовать воспользоваться хабровской таблицей:
https://habrahabr.ru/post/147843/

Спасибо.
В какой проге лучше менять кодировки?

Штирлицом пробывали?

Аватар пользователя tvnic

Не-а. Что за зверь такой?

Shtirlitz IV
специально для исправления сбитых кодировок

Аватар пользователя tvnic

Видимо это не мой случай. она ведь работает только с русским языком?

Он работает не с языками, а с со сбившимися кодировками. Пробуйте.

tvnic написал:
В какой проге лучше менять кодировки?

iconv

Аватар пользователя tvnic

Ситуация была такой - хочу сделать fb2-файл из имеющегося html-документа. В нем изначально были эти кракозябры.

Аватар пользователя Drunkenmunky

tvnic написал:
из имеющегося html-документа. В нем изначально были эти кракозябры.

Ну кто-то же его сделал.
Стандартными средствами после таких манипуляций восстановить символы можно не всегда.
Или, как правильно заметили выше, глобальной заменой. Или же поверкой орфографии с функцией "заменить всё".
Программа AfterScan для этого хороша чрезвычайно.
Аватар пользователя tvnic

Drunkenmunky написал:
Программа AfterScan для этого хороша чрезвычайно.

Попробую, что за зверь такой...
-----------------
Пока не использовал эту программу. Она ведь помогает находить и исправлять ошибки сканирования, а не ошибки кодировки?
Аватар пользователя Foggycat

Бросьте ссылку на HTML дайте другим побаловаться..)))
Не видя документа, трудно что-либо советовать...

Аватар пользователя tvnic

Файл здесь https://yadi.sk/d/mL09juhz3NxVdq
Смотрите в "Sanctuary by Peter Tremayne", там вроде больше всего этой хрени.

Аватар пользователя sd

UÃ=Uí (Uí Echach Cobo - историческая область в Ирландии)
Смотрим код htm
- следовательно í
Adnaí=Adnaíd
íguin=díguin
degree of Clí=degree of Clí
===
á
snádud=snádud
===
é
décor=décor
===
и добираемся до этой страницы - там есть расшифровки для крякозябров вашей htm

PS: вы можете открыть htm в Блокноте и произвести соответствующие замены. Когда избавитесь от всяких &Atilde, закройте Блокнот (сохраняя в utf-8)
===
http://dropmefiles.com/gqPEU

Аватар пользователя tvnic

Да уж...
Значит алгоритм такой
В таблице специальных символов находим литералы "глючных" символов и сопоставляем их здесь
Например в Rúinid ú = Atilde;ordm; = ù
В результате Rúinid = Rùinid
Так? Поправьте, если нет.
И можно ли как-то без таблиц узнавать, что ú=Atilde;ordm; или é=Atilde;copy; Я везде опустил символы &
--------
Если я привел пример правильно, то мне не ясно почему в Adnaà или díguin à обозначается Atilde;shy; Мягкий перенос - это потому-что символ à в данном слове сам по себе и не имеет рядом другой кракозябры?

Аватар пользователя Drunkenmunky

tvnic написал:
мне не ясно почему в Adnaà или díguin à обозначается í Мягкий перенос - это потому-что символ à в данном слове сам по себе и не имеет рядом другой кракозябры?

Еще раз.
Это результат неправильных действий при копировании\вставке.
Судя по всему, изначально HTML-файл был в кодировке UTF-8. Его ошибочно открыли в браузере с кодировкой WINDOWS-1252 (западно-европейская).
В результате чего, каждый из нелатинских символов был отображен в виде двух символов (так как UTF-8 нелатинские символы кодирует двумя байтами, а латинские одним).
Текст скопировали и вставили его уже в другой файл, с помощью программы кодирующей нелатинские символы в HTML-сущности.

Аватар пользователя sd

tvnic написал:
Да уж...
Значит алгоритм такой
В таблице специальных символов находим литералы "глючных" символов и сопоставляем их здесь
Например в Rúinid ú = Atilde;ordm; = ù
В результате Rúinid = Rùinid
Так? Поправьте, если нет.?

Так. Но будьте внимательны: не ù, а ú (вы ошиблись строчкой). Забавно, но это может быть глюк сохранения/отображения уже на данной странице в браузере. Я дал ссылку - там уже исправленный файл (не исправил только символ копирайта - злобно).
tvnic написал:
И можно ли как-то без таблиц узнавать, что ú=Atilde;ordm; или é=Atilde;copy; Я везде опустил символы &

Только если известно точное соответствие, как в U* Echach Cobo = Uí Echach Cobo
Пример: The five kingdoms of *irinn - речь идет о древнем названии Ирландии. *irinn = Éirinn. É = É (в таблице этого нет)

Остальное Drunkenmunky хорошо объяснил.
Проблема: данная таблица применима только для одного из многих вариантов подмены символов при распознании/сохранении в разных кодировках. И она неполная.
Но если вы будете и дальше встречаться с текстами такого типа - предположительно: спираченные из закрытой копирастами части ОткрытогоАрхива - то таблица может еще понадобиться. Сохраните ее.

PS: В тексте еще надо поменять -- на Em dash: —

Аватар пользователя tvnic

Всем благодарности. Проблема решена.
-----------
Не ругайтесь, если что. Но все-таки, непонятно.
Например,
В слове Rúinid два глючных символа - Ã и º Им соответствует двойная комбинация - Atilde; и ordm; (почему не 4 - по две на каждый символ?)
В слове díguin один глючный символ - Ã. Ему соответствует тоже двойная комбинация - Atilde; и shy; (почему именно shy; а не что-то другое?)
В первом случае получается Ã = Atilde; во втором Ã = Atilde;shy;

Аватар пользователя sd

(с опозданием) С ordm и shy все просто. Первый - код символа который отображается на странице, а второй - "мягкий перенос" - проявит себя только ко­гда слово, где он есть, доберется до края страницы и станет обычным пере-
носом.
Сочетание двух кодов - это подмена одного неопознанного при вставке символа. Когда пара кодов состоит из отображаемых символов - вы видите два символа. Когда в паре один символ слу­жебный - видите отображение только одного.
А вот почему неопознанный символ представлен сочетанием двух - долго буду объяснять и за­путаю вас, так как и сам только догадываюсь. Приблизительно.
---
Вставил в текст сообщения три shy - на моем экране только один проявился ))) суслики - их не видят, а они есть.

Аватар пользователя tvnic

sd написал:
С ordm и shy все просто.

+++
Аватар пользователя Foggycat

...я думаю, что мы много мудрим над этим текстом...
...там всего пять страничек, которые легко переводятся в Гугле...одна особенность...на украинский кракозябры переводит правильно...а на русский не хочет... Хи )))

Картинка: 
Аватар пользователя Foggycat

..ещё один...

Картинка: 
Аватар пользователя Foggycat

..ещё...

Картинка: 
Аватар пользователя tvnic

Это ведь половинчатое решение, если вообще таковым можно назвать.
Мы же тексты стараемся делать не приблизительно, а как положено?..

Аватар пользователя sd

Foggycat написал:
...я думаю, что мы много мудрим над этим текстом

Серьёзно?
Над этим текстом сейчас только вы мудрите.
Уже постов десять решается вопрос - что делать если такая проблема возникнет в будущем - и ваш способ не годится.
Аватар пользователя Drunkenmunky

sd написал:
что делать если такая проблема возникнет в будущем

Произвести обратные действия описанным мною выше.
Аватар пользователя sd

Только в том случае, если точно известно с какими кодировками производились действия до. Кстати, вам удалось произвести обратные действия?

Аватар пользователя Drunkenmunky

Иначе не писал бы. Побахвалиться, конечно, дорогого стоит, но эта проблема элементарна.

Аватар пользователя sd

Да и я спросил не для того, чтобы подловить. Если бы вы описали, как делали переконвертацию - пригодилось бы в будущем.

Цитата:
изначально HTML-файл был в кодировке UTF-8. Его ошибочно открыли в браузере с кодировкой WINDOWS-1252 (западно-европейская).
В результате чего, каждый из нелатинских символов был отображен в виде двух символов (так как UTF-8 нелатинские символы кодирует двумя байтами, а латинские одним).
Текст скопировали и вставили его уже в другой файл, с помощью программы кодирующей нелатинские символы в HTML-сущности.

- я не понял, как сделать первый шаг в обратном порядке
Аватар пользователя Drunkenmunky

sd написал:
как сделать первый шаг в обратном порядке

Набросал тут код на php, все шаги в нем. Возможно прямо в библиотеке сделать небольшой сервис для решения таких проблем.

<?php
header
('Content-type: text/html; charset=UTF-8');

$str = file_get_contents('0605EQMM.htm'); //Путь к загруженному xml/html документу

echo html_entity_decode($str, ENT_NOQUOTES, '1252'); //доступные кодировки по ссылке ниже

//http://php.net/manual/ru/function.html-entity-decode.php

?>
Аватар пользователя tvnic

Drunkenmunky написал:

Возможно прямо в библиотеке сделать небольшой сервис для решения таких проблем.

А вот это отлично было бы!
Это же несложно? Для меня, например, тёмный лес.
Аватар пользователя sd

Побахвалиться, конечно, дорогого стоит а вдруг заработает

Аватар пользователя Drunkenmunky

Скачайте какую-нибудь сборку Apache+PHP(например эту - http://www.usbwebserver.net/en/download.php)
Распакуйте например на флешку.
В папке "root" (для сборки выше)(в других сборках эта папка может называться как "htdocs","www", "home" и т.п.) создайте текстовый файл "test.php" поместите в него(с помощью стандартного Блокнота) код выше.
Рядом положите HTML файл под именем "0605EQMM.htm"
Запустите файл "usbwebserver.exe"(в других сборках так же называется по другому)
В вашем любимом браузере наберите "http://localhost/test.php"

Аватар пользователя sd

Спасибо.
Указанный адрес локалхоста у меня не открылся. Повторю полностью ваш рецепт с небольшой поправкой:

Drunkenmunky написал:
Скачайте какую-нибудь сборку Apache+PHP(например эту - http://www.usbwebserver.net/en/download.php)
Распакуйте например на флешку.
В папке "root" (для сборки выше)(в других сборках эта папка может называться как "htdocs","www", "home" и т.п.) создайте текстовый файл "test.php" поместите в него(с помощью стандартного Блокнота) код
<?php
header
('Content-type: text/html; charset=UTF-8');

$str = file_get_contents('0605EQMM.htm'); //Путь к загруженному xml/html документу

echo html_entity_decode($str, ENT_NOQUOTES, '1252'); //доступные кодировки по ссылке ниже

//http://php.net/manual/ru/function.html-entity-decode.php

?>
.
Рядом положите HTML файл под именем "0605EQMM.htm"
Запустите файл "usbwebserver.exe"(в других сборках так же называется по другому)
Откроется маленькое окно программы:
usbwebserver.exe
Кликнуть Loсalhost, откроется страница в браузере, к адресу страницы (у меня: http://localhost:8080/) дописать test.php (получится: http://localhost:8080/test.php). Обновить.

Сравнил с исходным файлом - всё исправлено.
Примечания:
Ссылка на страницу скачивания программы открылась только в браузере с обходом блокировки.
(mirror) Download USBWebserver V8.6 - работает только вторая ссылка.

Аватар пользователя Drunkenmunky

Если бы вы в настройках указали порт 80, то к локалхосту можно было бы ничего не дописывать. Тут ребята перемудрили.
Но и так тоже ничего.

Аватар пользователя Foggycat

Цитата:
изначально HTML-файл был в кодировке UTF-8. Его ошибочно открыли в браузере с кодировкой WINDOWS-1252 (западно-европейская).
В результате чего, каждый из нелатинских символов был отображен в виде двух символов (так как UTF-8 нелатинские символы кодирует двумя байтами, а латинские одним).
Текст скопировали и вставили его уже в другой файл, с помощью программы кодирующей нелатинские символы в HTML-сущности.

Вообще-то в таком виде этот текст лежит на сайте ЗДЕСЬ и таким мудрёным его сюда уже положили...и никакие скрипты не помогут...а только здравый смысл...)))
X