Главная страница
    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.039 c
3-1115892556
Lexer
2005-05-12 14:09
2005.06.29
Агрегирование в ClientDataSet


14-1117995253
Lagrange
2005-06-05 22:14
2005.06.29
Microsoft :-)


3-1115963757
Lex_!
2005-05-13 09:55
2005.06.29
Связывание нескольких таблиц по полю.


1-1117624080
Anics
2005-06-01 15:08
2005.06.29
Как отловить событие внутри родительской формы MDI приложен


1-1118219077
В л а д и м и р
2005-06-08 12:24
2005.06.29
Перевод курсора в конец текста





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский