Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > непонятная кодировка


Автор: Lorigin 8.12.2008, 00:16
Ребята помогите пожалуйсто... парсю страницу HTML.. английский выдерается хорошо, но вот русский на странице записан как то ужасно...

что это за кодировка?? и как мне её перевести в читаемый вид
Код

\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041a\u043e\u043c\u043d\u0438\u043d
\u0421\u0422\u0410\u041b\u0418\u041d
\u041a\u0443\u0437\u044f
\u0421\u0443\u0441\u043b\u0438\u043a
\u0410\u043c\u0435\u0440\u0442\u0430
\u0413\u0435\u043d\u0430


P.S. гуглил гуглил.. только что именно гуглить я и не знаю =\


Автор: Alexeis 8.12.2008, 10:28
  Ну очевидно \u - это признак юникода, дальше 0410 - 2 байта в хексе, т.е. мы имеем дело с UTF16

Автор: Lorigin 8.12.2008, 19:15
А есть готовые функции для перевода данного utf16 в читаемое ASCI?

Автор: Alexeis 8.12.2008, 20:13
  Гм... обычно такого рода преобразования есть в INDY компонентах, но есть ли именно такое преобразование не могу утверждать, зато могу перенести тему в сети, возможно там ребята знают.

Автор: Lorigin 8.12.2008, 20:45
Если не сложно перенеси пожалуйсто.

решил пока вот так:

Код

function GetUN(UniNum: string): string;
var
  s : string;
begin
  s := UniNum;
  Delete(s, 1, 2);
  s := Chr(StrToInt('$' + s) - 848);
  Result := s;
end;

function GetRus(UniText:widestring):widestring;
var
  i: integer;
  s, w: string;
begin
  s := UniText;
  if pos('\u', s) = 0 then
  begin
    Result := s;
    Exit;
  end;
  while pos('\u', s) > 0 do
  begin
    if pos('\u', s) = 1 then
    begin
      w := w + GetUn(Copy(s, pos('\u', s), 6));
      Delete(s, pos('\u', s), 6);
    end else
    begin
      w := w + Copy(s, 1, 1);
      Delete(s, 1, 1);
    end;
  end;
  if Length(s) > 0 then w := w + s;
  Result := w;
end;


но если есть вариант лучше хотелось бы знать


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)