|
Основной форум Сюда все проблемы связанные с программированием. |
06.12.2007, 00:39
|
#1
|
AnyKey`щик
Регистрация: 06.12.2007
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Непонятки с кодировкой...
Написал программу, которая берёт новости с моего сайта. Сайт отдаёт данные в кодировке UTF-8. MP, как я понял, принимает их именно в этом формате.
Но вот только принимаю я крякозябры. Кракозябры вида, как будто я просматриваю страницу через кодировку WESTERN.
Вот ссылка на страницу http://sportmobile.net/news_p.php?type=world&num=1&t=1
прога тут: http://sport.inlanger.org.ua/104038_sportmobile.zip
|
(Offline)
|
|
06.12.2007, 02:43
|
#2
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Re: Непонятки с кодировкой...
Попробуй отправлять с сервера заголовок с указанием кодировки
|
(Offline)
|
|
06.12.2007, 16:51
|
#3
|
ПроЭктировщик
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений (для 25 пользователей)
|
Re: Непонятки с кодировкой...
пробуй
function Str2UTF8(s: string):string;
var i: integer; a : string;
begin
a:='';
for i:= 0 to Length(s) do
if GetChar(s, i) > '~' then a:= a + Chr(Ord(GetChar(s, i)) - 64432)
else a:= a + GetChar(s, i);
Str2UTF8:= Copy(a, 0, Length(a)-1);
end;
|
(Offline)
|
|
06.12.2007, 21:04
|
#4
|
AnyKey`щик
Регистрация: 06.12.2007
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Непонятки с кодировкой...
хм...теперь выдаёт одни квадраты.
|
(Offline)
|
|
06.12.2007, 22:31
|
#5
|
ПроЭктировщик
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений (для 25 пользователей)
|
Re: Непонятки с кодировкой...
1251 юзай
|
(Offline)
|
|
07.12.2007, 00:27
|
#6
|
AnyKey`щик
Регистрация: 06.12.2007
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Непонятки с кодировкой...
в программе или на сайте?
|
(Offline)
|
|
07.12.2007, 03:20
|
#7
|
ПроЭктировщик
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений (для 25 пользователей)
|
Re: Непонятки с кодировкой...
Сообщение от inlanger
в программе или на сайте?
|
*** чувак эксперементируй децыл глянь какие коды символов отдает. дело 5 минут.
давай без мата, а?
|
(Offline)
|
|
08.12.2007, 18:45
|
#8
|
AnyKey`щик
Регистрация: 06.12.2007
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Непонятки с кодировкой...
ппц...вроде форум для того, чтобы помогать, а не наезжать и флудить...
|
(Offline)
|
|
26.06.2008, 13:32
|
#9
|
Нуждающийся
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
|
Ответ: Непонятки с кодировкой...
Отправляю и в Win и в utf, принимаю без перекодировок - крокозябли, ставлю указанную функцию выше, получаю квадратики, когда UTF - вроде их в 2 раза больше, но английские буквы отображаются нормально, а русские никак не хотят показываться.Есть единственный вариант который я вижу - передавать все в Encoded виде %E3.. а на мобиле конвертить обратно, можно и из UTF конвертить. Может кто подскажет, это вендь неправильно, как сделать ПРАВИЛЬНО ?
У кого есть примеры ?
|
(Offline)
|
|
26.06.2008, 20:06
|
#10
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Непонятки с кодировкой...
Что касается декодера, я бы сделал так:
uses hexdec;
function DecodeText(Src:string):string;
var
T,B:String;
I,SC:integer;
C:Char;
L:Integer;
begin
L:=Length(Src);
I:=0;
T:='';
while I < L do
begin
C:=GetChar(Src,I);
if C<>'%' then
begin
T:=T+C;
I:=I+1;
end
else
begin
B:='';
B:=B+GetChar(Src,I+1);
B:=B+GetChar(Src,I+2);
SC:=hex2dec(B);
T:=T+Chr(SC+848);
I:=I+3;
end;
end;
DecodeText:=T;
end;
Исходный текст до кодирования должен быть в win-1251.
|
(Offline)
|
|
27.06.2008, 07:26
|
#11
|
Нуждающийся
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
|
Ответ: Непонятки с кодировкой...
Вот все правильно, короче чтобы читать русские данные из интернета нужно сделать так:
1.Отправлять в Win-1251
2. Перед отправкой весь текст за URLEncode-ить (простые буквы не будут правильно отображаться, видимо потому что принимается только 7 бит, незнаю точно почему)
3. Приняв, нужно сделать URLDecode полученный текст
Последнее можно сделать с помощью библиотеки http://forum.boolean.name/showthread...ghlight=hexdec и указанной выше функцией.
Спасибо всем. Вижу русский текст на мобиле с интернета, Ура !
|
(Offline)
|
|
05.10.2008, 16:47
|
#12
|
AnyKey`щик
Регистрация: 05.10.2008
Сообщений: 1
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Непонятки с кодировкой...
а у меня вот такой исходник сработал:
function DecodeText(text:string) : string;
var i, len, cid, tilda:integer;
result,substr:string;
c:char;
work:boolean;
begin
tilda := ord('~');
len := length(text);
result := text;
for i := 0 to len - 1 do begin
c := GetChar(text, i);
cid := ord(c);
if cid > tilda then begin
cid := cid + 848;
result := SetChar(result, chr(cid), i);
end;
end;
DecodeText := result;
end;
|
(Offline)
|
|
05.10.2008, 17:39
|
#13
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Непонятки с кодировкой...
Объясняю. В utf-8 символы кодируются от 1 до 4 байт. Принимает программа побайтно, а при присваивании байтов типу String приводит к автоматическому преобразования данного байта к utf-8, то есть КАЖДЫЙ из байтов (а не из символов) становится от 1 до 4 байтов. То есть внешне получается, что вы utf-8 считываете в кодировке ASCII. Выход из этого вижу один. Парсить принимаемые данные в программе. Нужно отлавливать каждый байт более 192, после этого прибавлять к нему ВСЕ байты, идущие за ним, ПОКА не встретится байт менее 128 или более 192. Все эти байты в той же последовательности берём как int и конкатенируем к строке (или через буфер) с приставкой (char). Это я говорю, как бы я на Java сделал бы. Хотел я либу написать даже, гг. Но мне кажется, что способ весьма тормозной. Но зато полная интернациональность - возможность передавать текст на любом языке, а не только на русском. Но если использовать utf-8 для передачи через интернет, то нужно помнить, что траффик будет больше.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:17.
|