AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Firemonkey TUpper funktioniert nicht mit 'ß'!
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey TUpper funktioniert nicht mit 'ß'!

Ein Thema von Koloss · begonnen am 5. Jun 2014 · letzter Beitrag vom 5. Jun 2014
Antwort Antwort
Koloss

Registriert seit: 21. Jul 2010
74 Beiträge
 
Delphi 2 Desktop
 
#1

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 12:22
Es kommt eine exception!

Sogar wen ich ein Tabcontrol mit einen Tabitem auf das Formular lege und auf die Eigenschaft Text 'ß' rauf schreibe und starte passiert es!
Da dort intern ein ToUpper ausgeführt wird(warum das Android so macht weis ich nicht), kann man auch debuggen. Da sieht man das Toupper das Problem auslöst.

Meine Strings kommen von einer DB, da habe ich wenig Einfluss was der User reinschreibt. Ein 'ß' zu verbieten wäre nicht die Lösung.
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 12:33
Füge am Anfang Deiner Unit die Funktionen hinzu:

Code:
function LowerCase(const S: string): string;
begin
  Result := System.SysUtils.AnsiLowerCase(S);
end;

function UpperCase(const S: string): string;
begin
  Result := System.SysUtils.AnsiUpperCase(S);
end;
  Mit Zitat antworten Zitat
Koloss

Registriert seit: 21. Jul 2010
74 Beiträge
 
Delphi 2 Desktop
 
#3

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 14:18
Füge am Anfang Deiner Unit die Funktionen hinzu:

Code:
function LowerCase(const S: string): string;
begin
  Result := System.SysUtils.AnsiLowerCase(S);
end;

function UpperCase(const S: string): string;
begin
  Result := System.SysUtils.AnsiUpperCase(S);
end;
Danke aber es passiert auch intern beim TabItem vom TabControl, weil Android das automatisch groß darstellt.

Fehler passiert in System.SysUtils
Code:
function TStringHelper.ToUpper(LocaleID: TLocaleID): string;
{$IF defined(MSWINDOWS)}
begin
  Result := Self;
  if Result <> '' then
  begin
    UniqueString(Result);

    if LCMapString(LocaleID, LCMAP_UPPERCASE or LCMAP_LINGUISTIC_CASING, PChar(Self), Self.Length,
       PChar(Result), Result.Length) = 0 then
      RaiseLastOSError;
  end;
end;
{$ELSEIF defined(USE_LIBICU)}
var
  SelfLen: Integer;
  ResLen: Integer;
  ErrorCode: UErrorCode;
begin
  SelfLen := Self.Length;
  if SelfLen > 0 then
  begin
    ErrorCode := U_ZERO_ERROR;
    SetLength(Result, SelfLen);
    ResLen := u_strToUpper(PChar(Result), SelfLen, PChar(Self), SelfLen, LocaleID, ErrorCode);
    if (ErrorCode > U_ZERO_ERROR) then
    begin
      SetLength(Result, ResLen);
      ResLen := u_strToUpper(PChar(Result), ResLen, PChar(Self), SelfLen, LocaleID, ErrorCode); // hier bleibt er stehen
      if (ErrorCode > U_ZERO_ERROR) then
        raise EOverflow.CreateFmt(SICUErrorOverflow, [Int32(ErrorCode), UTF8ToString(u_errorName(ErrorCode)), ResLen]); // Meldung
    end;
  end
  else Result := Self;
end;
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 14:25
Ist die ICU Bibliothek Bestandteil des Betriebssystems / wird es von Delphi mit auf das Gerät kopiert? (Und ist es dies aktuellste Version des Emulators?)
Michael Justin
  Mit Zitat antworten Zitat
Koloss

Registriert seit: 21. Jul 2010
74 Beiträge
 
Delphi 2 Desktop
 
#5

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 14:57
Keine Ahnung! Es funktioniert aber auch auf einen Samsung S2 Handy mit Android 4.1.2 nicht.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.075 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 12:44
Es kommt eine exception!
Was denn für eine?
Meinst du nicht, dass es elementar wichtig wäre das zu wissen, um dir weiterhelfen zu können?

Übrigens, unter Windows und XE3 kommt korrekt wieder 'ß' zurück.
  Mit Zitat antworten Zitat
Koloss

Registriert seit: 21. Jul 2010
74 Beiträge
 
Delphi 2 Desktop
 
#7

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13:42
Auch unter XE6 und Windows-Firemonkey funktioniert es, nur nicht unter Android! iOS nicht getestet.

Exception EOverflow mit der Meldung ICU-Überlauffehler: 12, U_BUFFER_OVERFLOW_ERROR, Erforderliche Länge = 0
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13:49
Ruft hier evtl. der Delphi-Code einfach eine entsprechende API-Funktion von Android die sich hier einfach fehlerhaft verhält?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13:59
U_BUFFER_OVERFLOW_ERROR with "ß"

könnte passen ...
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz