Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

Unicode, UTF8   Найти похожие ветки 

 
readline();   (2007-08-28 17:44) [0]

Сижу читаю инфу по поводу юникода, но наткнулся вот в сети на некоторый код, который перобразует UTF8 в Ansi строку -- функция UTF8ToStrSmart. Но я не понимаю смысл этой функции, зачем она нужна?
Почему просто не воспользоваться стандартной UTF8Decode? Есть кике-то подводные камни? раз есть ещё и такой способ, как ниже.

{Convert string from UTF-8 format into ASCII}
function UTF8ToStr(Value: String): String;
var
 buffer: Pointer;
 BufLen: LongWord;
begin
 BufLen := Length(Value) + 4;
 GetMem(buffer, BufLen);
 FillChar(buffer^, BufLen, 0);
 MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
 Result := WideCharToString(buffer);
 FreeMem(buffer, BufLen);
end;

{Convert string from UTF-8 format mixed with standart ASCII symbols($00..$7f)}
function UTF8ToStrSmart(Value: String): String;
var
 Digit: String;
 i: Word;
 HByte: Byte;
 Len: Byte;
begin
 Result := "";
 Len := 0;
 if Value = "" then Exit;
 for i := 1 to Length(Value) do
 begin
   if Len > 0 then
   begin
     Digit := Digit + Value[i];
     Dec(Len);
     if Len = 0 then
       Result := Result + UTF8ToStr(Digit);
   end else
   begin
     HByte := Ord(Value[i]);
     if HByte in [$00..$7f] then       //Standart ASCII chars
       Result := Result + Value[i]
     else begin
       //Get length of UTF-8 char
       if HByte and $FC = $FC then
         Len := 6
       else if HByte and $F8 = $F8 then
         Len := 5
       else if HByte and $F0 = $F0 then
         Len := 4
       else if HByte and $E0 = $E0 then
         Len := 3
       else if HByte and $C0 = $C0 then
         Len := 2
       else begin
         Result := Result + Value[i];
         Continue;
       end;
       Dec(Len);
       Digit := Value[i];
     end;
   end;
 end;
end;


 
Vendict ©   (2007-08-29 13:58) [1]

readline();   (28.08.07 17:44)
Почему просто не воспользоваться стандартной UTF8Decode? Есть кике-то подводные камни? раз есть ещё и такой способ, как ниже.


может некоторым не охота нагружать свой ехе-шник лишними бибилиотеками. подводных камней нет, так как я такую же функцию использую на перле, хотя переделывал её из php.


 
tesseract ©   (2007-08-30 16:42) [2]


> Почему просто не воспользоваться стандартной UTF8Decode?
>  Есть кике-то подводные камни? раз есть ещё и такой способ,
>  как ниже.


У кого-то гемморой зарос, решил поправить. Кто тебе сказал, что у клиента стоит именно такая кодировка ?


 
CyberPunk   (2007-11-11 18:13) [3]

Лично у меня UTF8Decode не пахал в проге... отлично заработала UTF8ToStrSmart... Я долго искал что нить подобное этой функции....



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

Текущий архив: 2008.02.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
3-1191490877
Ega23
2007-10-04 13:41
2008.02.17
TDataLink - распознать Insert и Edit


2-1201293185
Riply
2008-01-25 23:33
2008.02.17
ReopenFile - как бы пооптимальнее выкрутиться ?


2-1201378604
AntonUSAnoV
2008-01-26 23:16
2008.02.17
опять про полосу прокрутки...


4-1183687219
AlexanderMS
2007-07-06 06:00
2008.02.17
Стиль элементов управления.


15-1200592478
Lip
2008-01-17 20:54
2008.02.17
А кому не жалко, выложите, образцовые исходники проекта