Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MultiByteToWideChar или другой способ перевести UTF16 LE в ANSI [D7]


NapalmRain ©   (2012-11-09 11:15:00) 

Доброго всем времени суток. Мне необходимо привести строку такого вида
http://s2.ipicture.ru/uploads/20121109/BWZuvTLM.jpg
Во что-то наиболее похожее на текст. В теории эта строка в UTF 16 Le, везде советуют использовать multibytetowidechar но нигде не смог найти примеры этой функции. Или может быть есть другой способ? Прошу подсазки


DVM   (2012-11-09 12:23:00) [1]

И да, кстати, именно в Ansi как написано в вопросе перевести правильно получится только если в системе текущая кодовая страница подходящая.
В WideString получится всегда.


DVM   (2012-11-09 11:51:00) [2]


>  но нигде не смог найти примеры этой функции

как  то так, с поправкой на твою задачу разумеется:


function AnsiStringToWideString(const Src: AnsiString; CodePage: Word = 0): WideString;
var
 Len: Integer;
begin
 if CodePage = 0 then
   CodePage := GetACP;
 if Src = '' then
   Result := ''
 else
   begin
     Len := MultiByteToWideChar(CodePage, 0, PAnsiChar(Src), Length(Src), nil, 0);
     if Len = 0 then
       RaiseLastOSError;
     SetLength(Result, Len);
     Len := MultiByteToWideChar(CodePage, 0, PAnsiChar(Src), Length(Src),
       PWideChar(Result), Length(Result));
     if Len = 0 then
       RaiseLastOSError;
   end;
end;



> Или может быть есть другой способ? Прошу подсазки

В новых версиях Delphi >=2009 есть класс TEncoding им можно. Для более старых версий Delphi есть аналог TEncoding тут:
http://www.gunsmoker.ru/2010/04/delphi-2009.html


Наверх

Титульная страница Поиск, карта сайта Написать письмо