Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Perl LWP::UserAgent и utf-8
|
|||
|---|---|---|---|
|
#18+
Есть у меня такой код: Код: php 1. 2. 3. 4. 5. 6. 7. А можно ли получить ответ от сервера сразу в UTF? Я пробовал задать кодировку в decoded_content ('charset'=>"utf-8"), но какой-либо разницы не заметил. ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2015, 11:43 |
|
||
|
Perl LWP::UserAgent и utf-8
|
|||
|---|---|---|---|
|
#18+
Можно, если сервер умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 00:07 |
|
||
|
Perl LWP::UserAgent и utf-8
|
|||
|---|---|---|---|
|
#18+
Э... Сервер умеет и возвращает именно utf-8. Но LWP::UserAgent (или, скорее, HTTP::Response) об этом не догадывается и не возвращает строку, как UTF. Вот результат $res->decoded_content: Код: plaintext Если же использовать decode, то результат читаем: Код: plaintext А можно ли обойтись без decode, чтобы в $res содержимое было уже в правильной кодировке и с правильными флагами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 10:15 |
|
||
|
Perl LWP::UserAgent и utf-8
|
|||
|---|---|---|---|
|
#18+
Кароче! Во первых, у нас есть два слоя: http протокол и поверх него перловые библиотеки. На уровне HTTP: Ты не можешь затребовать от сервера "дай мне документ в такой-то кодировке". Ты можешь сказать серверу что "я предпочту получить документ в таких-то кодировках". Для этого используется заголовок http запроса Accept-Charset. В Перле ты будешь задавать этот список в $req->header('Accept-Charset' => 'utf-8, cp1251, еще-чего-то'); Сервер может запросто игнорировать Accept-Charset запрос и отдавать документ как умеет или хочет. Если сервер решит удовлетворить Accept-Charset запрос, но не сможет сконвертировать текст в то что просили - ты получишь документ в том что сервер смог послать (обычно это то в чем документ хранится изначально). Если сервер смог удовлетворить запрос и конвертировал текст в нужный формат - то ты и получишь в http ответе заказанную кодировку. В любом случае (удовлетворил или нет) сервер укажет ( если захочет ) кодировку ответа вторым параметром в заголовке Content-Type. И да, сервер может это не указать или вообще соврать. Это то что касается самого HTTP и ручной работы с ним. Поднимаемся на уровень перловых библиотек: В $res->content находится текст в той самой кодировке которую выдал сервер. Ты сможешь узнать какая это именно кодировка читая $res->header('Content-Type'). (однако помним что сервер может не указать кодировку вообще или соврать) Ты можешь вручную конвертировать ответ из кодировки указанной сервером в любую другую, но тут у тебя есть помощь в виде $res->decoded_content. Там хранится уже конвертированный текст ответа, из той кодировки которую указал сервер в ту кодировку которую ты указал своей стандартной локалью. Читай perldoc perllocale. Поэтому для упрощения жизни: Ты можешь либо указывать Accept-Charset при формировании запроса и напрямую использовать $res->content (и надеяться что сервер удовлетворил твое пожелание). Либо не указывать Accept-Charset а всегда использовать $res->decoded_content (предполагается что у тебя правильно настроена локаль). Либо читать (или догадываться) о кодировке ответа на основе Content-Type и вручную конвертировать ответ из $res->content в ту кодировку которую тебе нужно. Все понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 20:49 |
|
||
|
Perl LWP::UserAgent и utf-8
|
|||
|---|---|---|---|
|
#18+
decoded_content у меня отрабатывает нормально. Заголовки (Accept-Charset) я передавал, они ничего не изменили (скорее всего веб-сервер их игнорирует). Скорее всего проблема была вызвана тем, что в ответе есть BOM. Такая конструкция: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2015, 11:45 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=39015121&tid=1461633]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 418ms |

| 0 / 0 |
