Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 05.12.2007, 21:39   #1
inlanger
AnyKey`щик
 
Регистрация: 05.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)
 
Ответить с цитированием
Старый 05.12.2007, 23:43   #2
Bruteo
ПроЭктировщик
 
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений
(для 43 пользователей)
Re: Непонятки с кодировкой...

Попробуй отправлять с сервера заголовок с указанием кодировки
(Offline)
 
Ответить с цитированием
Старый 06.12.2007, 13:51   #3
Kurdt
ПроЭктировщик
 
Регистрация: 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, 18:04   #4
inlanger
AnyKey`щик
 
Регистрация: 05.12.2007
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Непонятки с кодировкой...

хм...теперь выдаёт одни квадраты.
(Offline)
 
Ответить с цитированием
Старый 06.12.2007, 19:31   #5
Kurdt
ПроЭктировщик
 
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений
(для 25 пользователей)
Re: Непонятки с кодировкой...

1251 юзай
(Offline)
 
Ответить с цитированием
Старый 06.12.2007, 21:27   #6
inlanger
AnyKey`щик
 
Регистрация: 05.12.2007
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Непонятки с кодировкой...

в программе или на сайте?
(Offline)
 
Ответить с цитированием
Старый 07.12.2007, 00:20   #7
Kurdt
ПроЭктировщик
 
Регистрация: 28.03.2007
Сообщений: 194
Написано 7 полезных сообщений
(для 25 пользователей)
Re: Непонятки с кодировкой...

Сообщение от inlanger
в программе или на сайте?
*** чувак эксперементируй децыл глянь какие коды символов отдает. дело 5 минут.

давай без мата, а?
(Offline)
 
Ответить с цитированием
Старый 08.12.2007, 15:45   #8
inlanger
AnyKey`щик
 
Регистрация: 05.12.2007
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Непонятки с кодировкой...

ппц...вроде форум для того, чтобы помогать, а не наезжать и флудить...
(Offline)
 
Ответить с цитированием
Старый 26.06.2008, 09:32   #9
jkeks
Нуждающийся
 
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
Ответ: Непонятки с кодировкой...

Отправляю и в Win и в utf, принимаю без перекодировок - крокозябли, ставлю указанную функцию выше, получаю квадратики, когда UTF - вроде их в 2 раза больше, но английские буквы отображаются нормально, а русские никак не хотят показываться.Есть единственный вариант который я вижу - передавать все в Encoded виде %E3.. а на мобиле конвертить обратно, можно и из UTF конвертить. Может кто подскажет, это вендь неправильно, как сделать ПРАВИЛЬНО ?
У кого есть примеры ?
(Offline)
 
Ответить с цитированием
Старый 26.06.2008, 16:06   #10
ViNT
Модератор
 
Регистрация: 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, 03:26   #11
jkeks
Нуждающийся
 
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
Ответ: Непонятки с кодировкой...

Вот все правильно, короче чтобы читать русские данные из интернета нужно сделать так:
1.Отправлять в Win-1251
2. Перед отправкой весь текст за URLEncode-ить (простые буквы не будут правильно отображаться, видимо потому что принимается только 7 бит, незнаю точно почему)
3. Приняв, нужно сделать URLDecode полученный текст
Последнее можно сделать с помощью библиотеки http://forum.boolean.name/showthread...ghlight=hexdec и указанной выше функцией.

Спасибо всем. Вижу русский текст на мобиле с интернета, Ура !
(Offline)
 
Ответить с цитированием
Старый 05.10.2008, 12:47   #12
mizantrop
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, 13:39   #13
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,121
Написано 692 полезных сообщений
(для 1,723 пользователей)
Ответ: Непонятки с кодировкой...

Объясняю. В utf-8 символы кодируются от 1 до 4 байт. Принимает программа побайтно, а при присваивании байтов типу String приводит к автоматическому преобразования данного байта к utf-8, то есть КАЖДЫЙ из байтов (а не из символов) становится от 1 до 4 байтов. То есть внешне получается, что вы utf-8 считываете в кодировке ASCII. Выход из этого вижу один. Парсить принимаемые данные в программе. Нужно отлавливать каждый байт более 192, после этого прибавлять к нему ВСЕ байты, идущие за ним, ПОКА не встретится байт менее 128 или более 192. Все эти байты в той же последовательности берём как int и конкатенируем к строке (или через буфер) с приставкой (char). Это я говорю, как бы я на Java сделал бы. Хотел я либу написать даже, гг. Но мне кажется, что способ весьма тормозной. Но зато полная интернациональность - возможность передавать текст на любом языке, а не только на русском. Но если использовать utf-8 для передачи через интернет, то нужно помнить, что траффик будет больше.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с чтением строк из файла odd FAQ 6 29.07.2008 12:52
Непонятки с компиляцией библиотек ARV Основной форум 3 05.01.2007 17:25


Часовой пояс GMT +1, время: 08:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com