Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

UTF-8 to Windows-1251 (ANSI) --> библиотека DIConverters.pas   Найти похожие ветки 

 
Zhachuk ©   (2005-06-08 11:14) [0]

Имеется проблема: необходимо перекодировать строку в кодировке UTF-8 в Windows-1251 средствами Delphi-4. В Delphi-6 есть функция Utf8ToAnsi, которая и делает все дело, однако в Delphi-4 ее нет. В результате долгих поисков в Интернете нарыл бесплатную библиотеку DIConverters.pas (http://www.zeitungsjunge.de/delphi/converters/index.htm), которая вроде как позволяет конвертировать из UTF-8 в Unicode. Однако умения воспользоваться этой библиотекой не хватает :)
Если у кого есть мысли, как выполнить перекодировку UTF-8 --> Unicode --> Windows-1251, please, чиркните примерчик.


 
dmitry501 ©   (2005-06-08 11:32) [1]

Zhachuk ©   (08.06.05 11:14)
Вот, взял из  Audio Tools Library (Freeware) http://jfaul.de/atl

UTF-ANSI
function ConvertFromUTF8(const Source: string): string;
var
 Iterator, SourceLength, FChar, NChar: Integer;
begin
 { Convert UTF-8 string to ANSI string }
 Result := "";
 Iterator := 0;
 SourceLength := Length(Source);
 while Iterator < SourceLength do
 begin
   Inc(Iterator);
   FChar := Ord(Source[Iterator]);
   if FChar >= $80 then
   begin
     Inc(Iterator);
     if Iterator > SourceLength then break;
     FChar := FChar and $3F;
     if (FChar and $20) <> 0 then
     begin
       FChar := FChar and $1F;
       NChar := Ord(Source[Iterator]);
       if (NChar and $C0) <> $80 then  break;
       FChar := (FChar shl 6) or (NChar and $3F);
       Inc(Iterator);
       if Iterator > SourceLength then break;
     end;
     NChar := Ord(Source[Iterator]);
     if (NChar and $C0) <> $80 then break;
     Result := Result + WideChar((FChar shl 6) or (NChar and $3F));
   end
   else
     Result := Result + WideChar(FChar);
 end;
end;


UTF-UNICODE

function DecodeUTF8(const Source: string): WideString;
var
 Index, SourceLength, FChar, NChar: Cardinal;
begin
 { Convert UTF-8 to unicode }
 Result := "";
 Index := 0;
 SourceLength := Length(Source);
 while Index < SourceLength do
 begin
   Inc(Index);
   FChar := Ord(Source[Index]);
   if FChar >= $80 then
   begin
     Inc(Index);
     if Index > SourceLength then exit;
     FChar := FChar and $3F;
     if (FChar and $20) <> 0 then
     begin
       FChar := FChar and $1F;
       NChar := Ord(Source[Index]);
       if (NChar and $C0) <> $80 then  exit;
       FChar := (FChar shl 6) or (NChar and $3F);
       Inc(Index);
       if Index > SourceLength then exit;
     end;
     NChar := Ord(Source[Index]);
     if (NChar and $C0) <> $80 then exit;
     Result := Result + WideChar((FChar shl 6) or (NChar and $3F));
   end
   else
     Result := Result + WideChar(FChar);
 end;
end;


function EncodeUTF8(const Source: WideString): string;
var
 Index, SourceLength, CChar: Cardinal;
begin
 { Convert unicode to UTF-8 }
 Result := "";
 Index := 0;
 SourceLength := Length(Source);
 while Index < SourceLength do
 begin
   Inc(Index);
   CChar := Cardinal(Source[Index]);
   if CChar <= $7F then
     Result := Result + Source[Index]
   else if CChar > $7FF then
   begin
     Result := Result + Char($E0 or (CChar shr 12));
     Result := Result + Char($80 or ((CChar shr 6) and $3F));
     Result := Result + Char($80 or (CChar and $3F));
   end
   else
   begin
     Result := Result + Char($C0 or (CChar shr 6));
     Result := Result + Char($80 or (CChar and $3F));
   end;
 end;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
4-1115538019
Makhanev A.S.
2005-05-08 11:40
2005.06.29
Как запретить смену системного времени в Windows?


1-1118234991
Just3r~
2005-06-08 16:49
2005.06.29
Переход на новую версию


3-1116402505
SLP
2005-05-18 11:48
2005.06.29
копирование результатов запроса в буфер обмена


3-1116515179
Karlson
2005-05-19 19:06
2005.06.29
Фильтр в компоненте TTable и ему подобным


14-1117290223
Cerberus
2005-05-28 18:23
2005.06.29
Cтарая программа.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский