alexs писал(а):Не в винде нужен аналог. Что предложишь?
Не в винде работатет предложенный вариант в компоненте.
- Код: Выделить всё
{$IFDEF WINDOWS}
...
{$ELSE}
S:=UTF8ToDos(ALine);
{$ENDIF}
Добавлено спустя 2 часа 57 минут 37 секунд:
alexs писал(а):да кстати, а функцию то тестировал?
При тестах обнаружил ошибки. При печати больших текстов некоторые символы в определенных буквосочетаниях конвертировались с ошибкой. Функцию "творчески" переделал. И постановка UTF8ToWinCP() была не правильной.
- Код: Выделить всё
function UTF8ToCP866KazKKM(const FSrcString:string):string;
var
FSymbol: String;
i, L: Integer;
P: PChar;
FDst: PChar;
begin
Result:='';
i:=1;
while i<=Length(FSrcString) do
begin
P:=@FSrcString[i];
L:=UTF8CharacterLength(P);
FSymbol:=Copy(FSrcString, i, L);
i:=i+l;
if FSymbol='ә' then
Result:=Result + #177
else
if FSymbol='і' then
Result:=Result + #105
else
if FSymbol= 'ң' then
Result:=Result + #241
else
if FSymbol= 'ғ' then
Result:=Result + #220
else
if FSymbol= 'ү' then
Result:=Result + #248
else
if FSymbol= 'ұ' then
Result:=Result + #246
else
if FSymbol= 'қ' then
Result:=Result + #223
else
if FSymbol= 'ө' then
Result:=Result + #244
else
if FSymbol= 'һ' then
Result:=Result + #254
else
if FSymbol= 'Ә' then
Result:=Result + #176
else
if FSymbol= 'І' then
Result:=Result + #73
else
if FSymbol= 'Ң' then
Result:=Result + #240
else
if FSymbol= 'Ғ' then
Result:=Result + #219
else
if FSymbol= 'Ү' then
Result:=Result + #247
else
if FSymbol= 'Ұ' then
Result:=Result + #245
else
if FSymbol= 'Қ' then
Result:=Result + #222
else
if FSymbol= 'Ө' then
Result:=Result + #243
else
if FSymbol= 'Һ' then
Result:=Result + #253
else
begin
FSymbol := UTF8ToWinCP(FSymbol);
FDst := AllocMem((Length(FSymbol) + 1) * SizeOf(Char));
if CharToOEM(PChar(FSymbol), FDst) then
Result := Result + StrPas(FDst);
FreeMem(FDst);
end;
end;
SetCodePage(RawByteString(Result), CP_OEMCP, False);
end;
П.С.: Сам не программист и это только хобби. По этому любую критику готов принять.