Einzelnen Beitrag anzeigen

Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Steuerzeichen-String umwandeln in "echtes" Steuerzeichen

  Alt 29. Jun 2017, 17:11
In Delphi ist der UCS4 Deklariert als Cardinal

UCS4Char = type Cardinal;
und
UCS4String = array of UCS4Char;

Leider ist in der Function UCS4StringToUnicodeString ein Fehler.....
es wird immer ein UCS4 char zu wenig ausgewertet........
Also selber machen.

Delphi-Quellcode:
function myUCS4StringToUnicodeString(const S: UCS4String): UnicodeString;
var
  I: Integer;
  CharCount: Integer;
  Tmp: array of Char;
begin
  SetLength(Tmp, Length(S) * 2); //Maximum possible number of characters
  CharCount := -1;

  I := 0;
  while I < Length(S) do // Removed -1
  begin
    if S[I] >= $10000 then
    begin
      Inc(CharCount);
      Tmp[CharCount] := WideChar((((S[I] - $00010000) shr 10) and $000003FF) or $D800);
      Inc(CharCount);
      Tmp[CharCount] := WideChar(((S[I] - $00010000) and $000003FF)or $DC00);
    end
    else
    begin
      Inc(CharCount);
      Tmp[CharCount] := WideChar(S[I]);
    end;

    Inc(I);
  end;

  SetString(Result, PChar(Tmp), CharCount + 1);
end;


procedure TForm32.Button1Click(Sender: TObject);
const
  u41: UCS4Char = 128064;
  u42: UCS4Char = 128125;
  u43: UCS4Char = 128148;

Var
  test: Ucs4String;
  temp: String;
begin

  test := [u41, u42, u43];

  temp := myUCS4StringToUnicodeString(test);
  ShowMessage(temp);
end;
Fritz Westermann

Geändert von Fritzew (29. Jun 2017 um 17:27 Uhr) Grund: Länge für Tmp korrigiert
  Mit Zitat antworten Zitat