Определить кодировку строки

Димон

Новичок
Вопрос можно считать закрытым. На суть темы ответ найден. По крайне мере основа логики есть.
Спасибо.
 

Redjik

Джедай-мастер
Имхо, треш задача, обезьянки, проверяющие кодировку стоят дешевле ))
 

Димон

Новичок
Это не имеет значения, но не по этой причине.
Напрягись, пожалуйста, и предоставь запрошенную информацию.
Ну вот:
Код:
pdftotext -listenc
Available encodings are:
UCS-2
ASCII7
Latin1
UTF-8
ZapfDingbats
Symbol
Big5
EUC-JP
EUC-CN
ISO-2022-KR
Big5ascii
KOI8-R
GBK
ISO-8859-6
Latin2
Windows-1255
ISO-8859-7
ISO-8859-8
ISO-8859-9
ISO-2022-JP
TIS-620
ISO-2022-CN
Shift-JIS
 

AnrDaemon

Продвинутый новичок
Ясно.
pdftotext -enc Latin1 sample.pdf - | iconv -f ISO-8859-5


AmdY, кодировка, естественно, вшита в файл. Только вшита там Latin1 (ISO-8859-1), а текст на самом деле в ISO-8859-5.
Я на протяжении всего топика несколько раз повторял, что с битыми кодировками можно разобраться только одинм способом - достать текст без конвертации и уже с вынутым текстом работать. Никто слушать не хочет, хоть кол на голове теши.
 

AnrDaemon

Продвинутый новичок
Вопрос не в том, известна ли кодировка - мы заранее предполагаем, что она неверная, так что известна она или нет, нас не интересует.
Вопрос в том, как достать данные в неповреждённом перекодированием из неверной кодировки виде.
Либо как узнать, какая кодировка объявлена в документе, и надеяться, что если указать эту же кодировку для экспорта, то никакие преобразования применяться не будут, что в принципе сводится к первому варианту (доставание данных без перекодировки).
Для этого надо либо лезть в дебри библиотек и смотреть, какие низкоуровневые функции доступны, либо заниматься гаданием.
По использованию библиотеки сам смотри, что там доступно, я с ней никогда не работал.
А по поводу гадания…
В твоём случае, я думаю, можно применить примерно следующий алгоритм:
1. Попробовать достать данные в UTF-8.
2. Если результат ни на что не похож, достать данные в Latin1 и попробовать определить кодировку.
Поищи в инете алгоритмы биграммного анализа, им часто достаточно 15-20 символов для определения кодировки с очень высокой вероятностью.
 

Димон

Новичок
Вопрос не в том, известна ли кодировка - мы заранее предполагаем, что она неверная, так что известна она или нет, нас не интересует.
Вопрос в том, как достать данные в неповреждённом перекодированием из неверной кодировки виде.
Либо как узнать, какая кодировка объявлена в документе, и надеяться, что если указать эту же кодировку для экспорта, то никакие преобразования применяться не будут, что в принципе сводится к первому варианту (доставание данных без перекодировки).
Вообще не вариант. Конечная кодировка должна быть в utf8. Текст должен быть читабельным. Документ может прийти в любой кодировке.
 

Димон

Новичок
Просто достань читабельный текст при условии, что ты не знаешь о том что строка в iso-8859-5.
 

AnrDaemon

Продвинутый новичок
Ты слишком быстро отвечаешь. Дочитай пост до конца, пожалуйста.
Или прочитай мой предыдущий пост с начала.
 

Димон

Новичок
Ты слишком быстро отвечаешь. Дочитай пост до конца, пожалуйста.
Или прочитай мой предыдущий пост с начала.
Да, пост был короткий.
Это не будет работать, т.к. при попытке определить нечитабельный язык будет приходить ответ, что это вьетнамский или хинди или что-то подобное.
 

Димон

Новичок
Как опеределить кодировку я уже писал выше. Не нужно ничего в нете искать.
 

AnrDaemon

Продвинутый новичок
Если вы уже сдались и опустили руки, не вижу смысла вас в чём-то убеждать.
 

AnrDaemon

Продвинутый новичок
Димон, если вам хочется определять ВООБЩЕ ЛЮБОЙ язык документа, включая вьетнамский и Хинди, то, конечно, задача сильно усложняется.
А теперь посмотритесь в зеркало и честно ответьте - со сколькими языками ваша программа будет работать реально?
 

Димон

Новичок
Димон, если вам хочется определять ВООБЩЕ ЛЮБОЙ язык документа, включая вьетнамский и Хинди, то, конечно, задача сильно усложняется.
А теперь посмотритесь в зеркало и честно ответьте - со сколькими языками ваша программа будет работать реально?
С этими языками тоже работает.
 
Сверху