Russian Qt Forum

Qt => Работа с сетью => Тема начата: sonicCat от Февраль 02, 2008, 21:40



Название: Кодировка html
Отправлено: sonicCat от Февраль 02, 2008, 21:40
Если открыть линк оперой или Explorer-ом
http://www.translate.google.com/translate_dict?q=telephone&hl=en&langpair=en%7Cru
то они паказывают что файл в UТF-8 ( charset=UTF-8 )

Если я загружаю фай с помощью Qt:
http("www.translate.google.com",80) - конструктор
http.get( "/translate_dict?q=man&hl=en&langpair=en%7Cru" , &buffer );

то в буфере у меня  charset=ISO-8859-1 и вместо русских букв &#4ре_цифры;
видать google берет откудато кауюто информацию  :) по которой решает что присылать

Может кто подскажет что именно нужно добавить.


Название: Re: Кодировка html
Отправлено: DpoHro от Февраль 03, 2008, 01:40
Может кто подскажет что именно нужно добавить.
Если сервер от клиента что и берет, то через хидеры, туда и нужно добавлять...
http://www.w3.org/Protocols/rfc2616/rfc2616.html
+QHttpRequestHeader

Точного решения не знаю, самому интересно...


Название: Re: Кодировка html
Отправлено: sonicCat от Февраль 03, 2008, 11:41
фи, в моем случае оказалось все совсем просто: нужно было изменить hl=en на hl=ru
но при этом я получаю charset=windows-1251, в винде все отабражается нормально а вот как в UNIXах незнаю.

Также пробовал следующее:

Код:
telnet www.translate.google.com 80
GET /translate_dict HTTP/1.1

получал charset=ISO-8859-1
а если так:

Код:
telnet www.translate.google.com 80
GET /translate_dict HTTP/1.1
Accept-Language: ru

то получал charset=windows-1251
как Опера получает UТF-8 так и не понял т.к. если я добавляю Accept-Charset: utf-8 то это не меняет результата 

Цитировать
http://www.w3.org/Protocols/rfc2616/rfc2616.html
Спасибо за ссылку, в загловках по ней разбирался


Название: Re: Кодировка html
Отправлено: Sokoloff от Февраль 04, 2008, 10:59
Опера берет это из HTML и HTTP заголовков. Открой страницу и посмотри в исходном HTML коде первую строку:
Код:
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
это HTML заголовок.

Есть еще HTTP заголовок Content-Type. В идеале они должны указывать на одинаковые кодировки, но так бывает не всегда. Кто важнее точно не знаю (см. например http://apache.lexa.ru/meta-http.html).
А так почитай http://www2.stack.ru/~julia/HTML4/charset.html, ну и гугл в помощь.
 



Название: Re: Кодировка html
Отправлено: Sokoloff от Февраль 04, 2008, 11:22
Вот специально посмотрел, HTTP заголовоки выглядят так:
Код:
HTTP/1.0 200 OK
Set-Cookie: PREF=ID=10ce15d86a31825d:TM=1202113110:LM=1202113110:S=tlLxpqjLgShPj5wS; expires=Wed, 03-Feb-2010 08:18:30 GMT; path=/; domain=.google.com
Content-Type: text/html; charset=ISO-8859-1
Server: TWS/0.9
Cache-Control: private, x-gzip-ok=""
Date: Mon, 04 Feb 2008 08:18:30 GMT
Connection: Close

Т.е. в HTTP заголовке указан один charset, а в HTM-е другой, в данном случае HTML-ный правильнее.


Название: Re: Кодировка html
Отправлено: sonicCat от Февраль 04, 2008, 12:20
А дело в том что у оперы в HTML
Код:
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8">

А у меня ( когда загружаю страницу через telnet или через Qt )
Код:
<html><head><meta http-equiv="content-type" content="text/html; charset=windows-1251">

т.е. приходят разные html страницы
может опера уже сама переводит в UTF-8


Название: Re: Кодировка html
Отправлено: Sokoloff от Февраль 04, 2008, 13:47
Посмотри с помощью Ethreal ( http://www.ethereal.com ) что передает опера и твоя программа.
IMHO дело в следующих строках в HTTP запросе:
Код:
Accept-Language: ru-RU,ru;
Accept-Charset:  iso-8859-1, utf-8, utf-16, *;