Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 15:36   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию IdHTTP не правильно выводит кириллицу

Получаю данные с PHP сохранённого в кодировке UTF-8 в этого кириллица отображается символами. В чём проблема?
Вложения
Тип файла: zip Projects.zip (7.1 Кб, 12 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 17.04.2010, 18:57   #2
Vlad_55
Пользователь
 
Регистрация: 03.11.2007
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Получаю данные с PHP сохранённого в кодировке UTF-8 в этого кириллица отображается символами. В чём проблема?
переводи кодировку полученного документа в Ansi. Можно воспользоваться старенькими функциями типа utf8ToAnsi, а можно и более продвинутым способом через TEncoding (D2009-2010) ну или через интерфейс IMultiLanguage. Вариантов море
WebDelphi.ru - блог о программировании на Delphi
Vlad_55 вне форума Ответить с цитированием
Старый 17.04.2010, 19:47   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

У меня Delphi 7, так что TEncoding отпадает. Utf8ToAnsi помогло.

Delphi XE7. Тажа проблема с кодировкой.
Решение проблемы
Код:
function GetUTF8Page(URL: string): AnsiString;
var
  Stream: TStream;
  IdHTTP: TIdHTTP;
begin
  try
    IdHTTP := TIdHTTP.Create(nil);
    Stream := TMemoryStream.Create;
    try
      IdHTTP.Get(URL, Stream);
      Stream.Position := 0;
      SetLength(Result, Stream.Size);
      Stream.Read(Result[1], Stream.Size);
      Result := AnsiString(UTF8ToString(Result));
    except
    end;
  finally
    FreeAndNil(IdHTTP);
    FreeAndNil(Stream);
  end;
end;

procedure TForm22.Button1Click(Sender: TObject);
begin
  Memo1.Text := String(GetUTF8Page('http://localhost/messages.php'));
end;
Можно ли как-то упростить получение данных в кодировке UTF-8?

Последний раз редактировалось Stilet; 28.02.2015 в 09:14.
Shouldercannon вне форума Ответить с цитированием
Старый 27.02.2015, 17:13   #4
disbnt
Пользователь
 
Регистрация: 18.09.2014
Сообщений: 32
По умолчанию

Может utf8decode("строка")
Код:
 s := utf8decode(IdHTTP.Get(URL));

Последний раз редактировалось disbnt; 27.02.2015 в 17:15.
disbnt вне форума Ответить с цитированием
Старый 27.02.2015, 19:01   #5
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
function UTF8_DelphiXE7(aStr: String): string;
// uses System.NetEncoding
var
  Base64: TEncoding;
  StrArray: TBytes;
begin
  Base64 := TEncoding.Create;
  try
    try
      StrArray := BytesOf(aStr);
      Result := StringOf(Base64.Convert(Base64.Default, TEncoding.UTF8, StrArray));
    except
      ShowMessage(aStr + #13#10 + SysErrorMessage(GetLastError));
      Result := '';
    end;
  finally
    FreeAndNil(Base64);
  end;
end;
как-то так, в какой бы кодировке текст не был вернет в UTF8
ZuBy вне форума Ответить с цитированием
Старый 27.02.2015, 19:36   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Хм. Ни один из способов не помог. Данные уже в UTF-8 приходят.
На
Код:
Base64 := TEncoding.Create;
Предупреждения:
[dcc32 Warning] Unit22.pas(56): W1020 Constructing instance of 'TEncoding' containing abstract method 'TEncoding.GetMaxByteCount'
[dcc32 Warning] Unit22.pas(56): W1020 Constructing instance of 'TEncoding' containing abstract method 'TEncoding.GetMaxCharCount'
[dcc32 Warning] Unit22.pas(56): W1020 Constructing instance of 'TEncoding' containing abstract method 'TEncoding.GetPreamble'

Последний раз редактировалось Shouldercannon; 27.02.2015 в 19:39.
Shouldercannon вне форума Ответить с цитированием
Старый 27.02.2015, 23:35   #7
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Может так?
Код:
Utf8ToAnsi(IdHTTP1.Get('http://.................');

Последний раз редактировалось NIKOLAYY2; 27.02.2015 в 23:38.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 28.02.2015, 08:15   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Безрезультатно
Shouldercannon вне форума Ответить с цитированием
Старый 01.03.2015, 07:38   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Хм. Ни один из способов не помог. Данные уже в UTF-8 приходят.
На
Код:
Base64 := TEncoding.Create;
Предупреждения:
[dcc32 Warning] Unit22.pas(56): W1020 Constructing instance of 'TEncoding' containing abstract method 'TEncoding.GetMaxByteCount'
[dcc32 Warning] Unit22.pas(56): W1020 Constructing instance of 'TEncoding' containing abstract method 'TEncoding.GetMaxCharCount'
[dcc32 Warning] Unit22.pas(56): W1020 Constructing instance of 'TEncoding' containing abstract method 'TEncoding.GetPreamble'
какая Delphi?
у меня Delphi XE7, проблем нет.

Поиграй с параметрами
Код:
 Result := StringOf(Base64.Convert(Base64. Default, TEncoding.UTF8, StrArray));
ZuBy вне форума Ответить с цитированием
Старый 01.03.2015, 09:35   #10
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

К модулям IdGlobal;
Запрос
Код:
 html := IdHTTP1.Get('ссылка', IndyTextEncoding_UTF8);
kta87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция не распознаёт кириллицу Кипящий чайник Общие вопросы C/C++ 2 23.12.2009 16:55
перевести символ из латиницы в кириллицу StartMis Общие вопросы Delphi 2 30.11.2009 10:07
Не выводит на монитор and77k Общие вопросы C/C++ 2 27.11.2009 10:28
не выводит значение функции... blackbanny Общие вопросы C/C++ 6 17.10.2009 15:19