PDA

Bekijk de volledige versie : Kодировка Windows-1251 (iconv)



idShura
06-01-2013, 21:55
Мне необходимо найти некий текст на странице и сохранить его в файл используя команду вроде этой:
wget -q -O- http://name.ru | grep "Искомый текст" >> 1.txt

Проблема в том что страница в кодировке Windows-1251 и в файл 1.txt ничего не записывается, хотя "искомый тест" есть на странице.

Если выполнить команду wget -q -O- http://name.ru, то весь русский текст выглядит так :

▒▒▒▒▒▒▒▒

MercuryV
06-01-2013, 22:30
Проблема в том что страница в кодировке Windows-1251
Используйте iconv

$ wget 'http://wl500g.info/showthread.php?30703&langid=3' -q -O- | iconv -f cp1251 | grep "русский текст"

idShura
07-01-2013, 05:20
Вариант с iconv не совсем подходит потому что на wl500gpv2 у меня не хватает места для ее установки. Может есть какой-нибудь другой способ?

ryzhov_al
07-01-2013, 06:53
Может есть какой-нибудь другой способ?Какого-нибудь другого способа без сторонних утилит нет. Поэтому для решения вашей задачи вам придётся:


погуглить какие в линуксе есть средства перекодирования текста,
оценить влезет ли скомпилированный\скриптованный вариант в куцый флеш wl500gpv2,
реализовать выбранный вариант самостоятельно или с чьей-то помощью.

idShura
07-01-2013, 08:27
Не получается установить iconv из-за нехватки места (wl500gpv2).
Может быть можно подключить к роутеру флешку и установить iconv на нее?


Filesystem Size Used Available Use% Mounted on
rootfs 4.5M 4.5M 0 100% /
/dev/root 4.5M 4.5M 0 100% /
devfs 100.0K 4.0K 96.0K 4% /dev
tmpfs 14.2M 280.0K 13.9M 2% /tmp

MercuryV
07-01-2013, 10:28
Может быть можно подключить к роутеру флешку и установить iconv на нее?
Конечно можно :)

idShura
07-01-2013, 11:19
Для этого нужно переустанавливать прошивку роутера? Сейчас у меня стоит прошивка 1.9.2.7-rtn-r4330, меня все устраивает. Есть только необходимость установки iconv. Хотелось бы только воткнуть в него флешку, сказать системе что там будут храниться программы..., а как это сделать я не знаю. Буду очень благодарен если вы подскажете как мне это можно сделать.

MercuryV
07-01-2013, 11:47
Для этого нужно переустанавливать прошивку роутера? Сейчас у меня стоит прошивка 1.9.2.7-rtn-r4330
нет, не нужно.

воткнуть в него флешку, сказать системе что там будут храниться программы...
Например, вот так (https://code.google.com/p/wl500g-repo/wiki/Pre_requisites_for_Entware_installation_on_Oleg_fi rmware)
или читайте форум

idShura
10-01-2013, 15:21
Если запускаю
wget 'http://wl500g.info/showthread.php?30703&langid=3' -q -O- | iconv -f cp1251 | grep "русский текст" из командной строки, то все работает, а если запускаю из crontab то нет. Перепробовал много разных вариантов и понял что не корректно работает именно iconv (даже если преобразую файл из одной кодировки в другую).

ryzhov_al
10-01-2013, 15:31
Прописывайте полный путь до iconv.

idShura
10-01-2013, 15:32
Прописывал /opt/bin/iconv - не помогло

ryzhov_al
10-01-2013, 15:59
Действительно не помогло. Следующая подсказка: iconv -f CHARSET1 -t CHARSET2 перекодирует входную строку из кодировки CHARSET1 в кодировку CHARSET2. Пока вы работаете в терминале, для вашего сеанса определена переменная среды LANG, подсказывающая для iconv выходную кодировку. Откуда iconv может узнать выходную кодировку, работая в составе cron-задания?

idShura
10-01-2013, 16:00
Спасибо, буду пробовать. Сделал по другому: Установил утилиту recode


wget 'http://name.ru' -q -O- | recode windows1251..utf8 | grep "Текст" > /test

Действительно не помогло. Следующая подсказка: iconv -f CHARSET1 -t CHARSET2 перекодирует входную строку из кодировки CHARSET1 в кодировку CHARSET2. Пока вы работаете в терминале, для вашего сеанса определена переменная среды LANG, подсказывающая для iconv выходную кодировку. Откуда iconv может узнать выходную кодировку, работая в составе cron-задания?
Пробовал уже, не помогло

ryzhov_al
10-01-2013, 16:06
Пробовал уже, не помоглоНе верю, т.к. проверял сам, такой вариант в cron'е работает:

wget 'http://wl500g.info/showthread.php?30703&langid=3' -q -O- | iconv -f cp1251 -t UTF-8 | grep "русский текст"

idShura
10-01-2013, 17:29
Не верю, т.к. проверял сам, такой вариант в cron'е работает:

wget 'http://wl500g.info/showthread.php?30703&langid=3' -q -O- | iconv -f cp1251 -t UTF-8 | grep "русский текст"

Проверил еще раз, действительно работает... :)

p/s/ когда я пробовал различные варианты я установил локаль в начале скрипта и забыл про нее. Когда я пробовал твой вариант стояла неправильная локаль. Прошу прощенья что всех запутал, но зато теперь я знаю два рабочих способа как сделать то что я хотел. Всем кто помогал спасибо!

Polet
13-11-2013, 06:01
Здравствуйте
Как и в каком файле записать iconv в php?
куда вписывается ключ --with-iconv[=DIR]