есть небольшая проблемка с функцией Str2Utf8 (которую я же сам и написал

, используемой в скрипте для InnoSetup - она может возвращать строку, добитую справа пробелами или мусором. я пробовал фиксить так:
[more]
function Str2Utf8(strSource: string): string;
var
nRet : integer;
WideCharBuf,MultiByteBuf: string;
begin
SetLength( WideCharBuf, Length( strSource )*2 );
SetLength( MultiByteBuf, Length( strSource )*2 );
strSource := strSource + chr(0);
nRet := MultiByteToWideChar(0,0,strSource,-1,WideCharBuf,Length(WideCharBuf));
nRet := WideCharToMultiByte(65001,0,WideCharBuf,-1,MultiByteBuf,Length(MultiByteBuf),0,0);
Result := Trim(MultiByteBuf);
end;[/more]но не шибко помогает.
А глючит когда строка, передаваемая в функцию, содержит помимо кириллицы еще и латиницу или небуквы (~`!@#$%^&*()0123456789_-"№;:,. и тд и тп). уж не знаю как это до сих пор не всплыло, но...
Добавлено: Доработал, теперь судя по тестам все нормально стало:
[more]//********************************************************************
// Функция преобразует строку в UTF-8 кодировку (для FreeArcExtract)
//********************************************************************
function Str2Utf8(strSource: string): string;
var
nStrLen, nUTF8Len, nStrPos, nRet: integer;
WideCharBuf,MultiByteBuf: string;
begin
nStrLen := Length(strSource);
nUTF8Len := nStrLen*2;
// корректируем длину строки для Copy исходя из того что символы с ASCII-кодом
// до 127 будут иметь какбы 1-байтовую длину (реально в UTF8 все символы в 2 байтах)
for nStrPos:=1 to nStrLen do if Ord(strSource[nStrPos])<127 then nUTF8Len:=nUTF8Len-1;
strSource := strSource + chr(0);
SetLength( WideCharBuf, nStrLen*2 );
SetLength( MultiByteBuf, nStrLen*2 );
nRet := MultiByteToWideChar(0,0,strSource,-1,WideCharBuf,Length(WideCharBuf));
nRet := WideCharToMultiByte(65001,0,WideCharBuf,-1,MultiByteBuf,Length(MultiByteBuf),0,0);
Result := Copy(MultiByteBuf,1,nUTF8Len);
end;[/more]