Jak pozbawic "ąęäëÿö" ogonkow (nie tylko polskich)

0

jak w temacie.
jest moze jakas gotowa funkcja ktora to zrobi?
czy musze po prostu "przeleciec" po lancuchu znakow, sprawdzac czy to znak z ogonkiem, jesli tak do wstawic inny :-/

0

nie ma gotowej, ale np. w synapse jest cały moduł do konwersji

0

A może pobaw się WideCharToMultiByte, tam jest kilka opcji. Pamiętam, że można uzyskać podobny efekt.

0

dobra.. juz zrobilem.. w sumie nie jest tego az tak duzo...
pisalem wlasna wersje Pos() i tego potrzebowalem.
w koncu zrobilem to uzywajac AnsiLowercase() i "recznie" pozamienialem znaki z ogonkami na normalne...
czyli
ęóąśłżźćńâäçéëíôöúüýăččő
na
eoaslzzcnaaceeioouuyacco

ale dzieki za pomoc [browar]

0

Bawiłem się tym kiedy pisałem Notatnik ;-) Taki efekt uzyskuje się po zamianie na stronę kodową US-ASCII.

const
  CP_USASCII = 20127;

function WideToAnsi(const Ws: WideString; Cp: Word): AnsiString;
var
  I, F: Integer;
begin
  if (Cp = CP_UTF7) or (Cp = CP_UTF8) then 
    F := 0 else
    F := WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR;
  I := Pred(WideCharToMultiByte(Cp, F, PWideChar(Ws), -1, nil, 0, nil, nil));
  if I > 0 then
  begin
    SetLength(Result, I);
    WideCharToMultiByte(Cp, F, PWideChar(Ws), -1, PAnsiChar(Result), I, nil, nil);
  end else
    Result := '';
end;

function AnsiToWide(const S: AnsiString; Cp: Word): WideString;
var
  I, F: Integer;
begin
  if (Cp = CP_UTF7) or (Cp = CP_UTF8) then 
    F := 0 else
    F := MB_PRECOMPOSED;
  I := Pred(MultiByteToWideChar(Cp, F, PAnsiChar(S), -1, nil, 0));
  if I > 0 then
  begin
    SetLength(Result, I);
    MultiByteToWideChar(Cp, F, PAnsiChar(S), -1, PWideChar(Result), I);
  end else
    Result := '';
end;

var
  Ogonki, BezOgonkow: string;
begin
  BezOgonkow := WideToAnsi(AnsiToWide(Ogonki, CP_ACP), CP_USASCII);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1