Задать вопрос
@User258
Программист

Почему переведенное слово отображается в виде кодировки?

Написал программу которая переводит слова с русского на английский с помощью яндекс переводчика.
Но если делю ответ на строки после двоеточия то переведенное слово отображается в виде кодировки
например привет становится %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82.
Как это исправить ?
Пишу в Delphi 2010.
Если переводить с английского на русский то переводит нормально.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdBaseComponent,
  IdCookieManager, StdCtrls, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
  IdSSL, IdSSLOpenSSL;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    IdCookieManager1: TIdCookieManager;
    IdHTTP1: TIdHTTP;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 Http : TidHttp;
 CM : TidCookieManager;
 post,stok: TStringList;
 str,str2:string;
 StrPage, UserID, UserName : String;
 i ,p: integer;
begin

 Http := TIdHTTP.Create(Self);
 post := TStringList.Create;
  stok := TStringList.Create;

 Http.Request.Host:='translate.yandex.ru';
 Http.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36';
 Http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
 Http.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
 Http.Request.AcceptCharSet:='utf-8,windows-1251;q=0.7,*;q=0.7';
 Http.Request.Referer:='https://www.yandex.ru/';

post.Add('key=');
post.Add('text='+Edit1.text);
post.Add('lang=ru-en');
Memo1.Lines.Text := IdHTTP1.Post('https://translate.yandex.net/api/v1.5/tr.json/translate ?', post);
   str:=IdHTTP1.Post('https://translate.yandex.net/api/v1.5/tr.json/translate ?', post);

   p:=1;

  while (length(str)+1 > p)  do begin

      if (str[p]= ':') or (p=length(str))  then
      begin
      stok.Add(str2);
      str2:='';
       end
      else        begin
      str2:=str2+str[p];
         end;

       p:=p+1;

  end;

    memo2.Lines.Text:=stok.Text;

end;
end.
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Собственно нормальный ответ: английские буквы в utf8 - это просто английские буквы, а русские буквы в utf8 закодированы шестнадцатеричными символами, в данном случае они вам вернулись с префиксом %:
D09F - П
D180 - р
D0B8 - и
D0B2 - в
D0B5 - е
D182 - т
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы