Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Firemonkey TUpper funktioniert nicht mit 'ß'! (https://www.delphipraxis.net/180653-firemonkey-tupper-funktioniert-nicht-mit-ss.html)

Koloss 5. Jun 2014 12:00

Firemonkey TUpper funktioniert nicht mit 'ß'!
 
Delphi XE6

Ich teste mit dem Android Emulator, habe auch versucht den Emulator auf Deutsch zu stellen!

Diese ganz einfache Funktion funktioniert leider nicht! Z.b.: mit 'ö', 'ä' usw. funktioniert es, nur mit dem 'ß' klappt es nicht!

Code:
var str:String;
begin
  str := 'ß';
  str := str.ToUpper;
  Caption := str;
end;

mjustin 5. Jun 2014 12:07

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
Zitat:

mit dem 'ß' klappt es nicht!
Was passiert denn? (die vorstellbare Bandbreite reicht von 'Text bleibt unverändert' bis 'Warpkernbruch' :)

matthiaskary 5. Jun 2014 12:13

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
Hallo,

schau dazu mal unter Wiki nach, ist kein Fehler von XE6

Großschreibweise
→ Hauptartikel: Großes ß

Beim Satz deutscher Texte in Versalien oder Kapitälchen tritt das Problem eines fehlenden Großbuchstaben „ß“ auf.

Nach den heutigen Rechtschreibregeln existiert kein Großbuchstabe zum ß: „Jeder Buchstabe existiert als Kleinbuchstabe und als Großbuchstabe (Ausnahme ß).“[24] Kerstin Güthert, Geschäftsführerin des Rats für deutsche Rechtschreibung, schreibt dazu:

„Es ist … eine Frage, die schon seit Jahrzehnten unbeantwortet ist und es wohl auch auf geraume Zeit auch bleiben wird. Der Grund liegt darin, daß es dem Rat für deutsche Rechtschreibung nicht zusteht, Schriftzeichen zu erfinden. Seine Aufgabe ist es, die Schreibung zu beobachten und darauf zu achten, dass Regeln und Schreibgebrauch sich im Einklang befinden. Es bedarf also einer Initiative aus der Schreibgemeinschaft …, um hier auf der Basis eines gesellschaftlichen Konsens[es] Abhilfe zu schaffen.“

– Kerstin Güthert[25]
Großschreibweise mit Ersetzung von ß durch SS

Die heutigen Rechtschreibregeln schreiben vor, im Versalsatz das „ß“ durch „SS“ zu ersetzen („Weiß“ wird zu „WEISS“).

Ursprünglich hatte der Duden bei Großschreibweise die Ersetzung durch „SZ“ vorgesehen.[26] Diese Schreibung wurde später zugunsten der Schreibung mit „SS“ auf diejenigen wenigen Fälle begrenzt, in denen Verwechslungen möglich sind (z. B. „Maße“ → „MASZE“ gegenüber „Masse“ → „MASSE“).[27] In der reformierten Rechtschreibung von 1996 wurde die Ersetzung durch „SZ“ ganz abgeschafft. Im April 2008 wurde der Weg zu der Einführung eines ß-Großbuchstaben geebnet, siehe unten.

Koloss 5. Jun 2014 12:22

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
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.

greenmile 5. Jun 2014 12:33

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
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;

TiGü 5. Jun 2014 12:44

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
Zitat:

Zitat von Koloss (Beitrag 1261478)
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.

Koloss 5. Jun 2014 13:42

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
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

Bernhard Geyer 5. Jun 2014 13:49

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
Ruft hier evtl. der Delphi-Code einfach eine entsprechende API-Funktion von Android die sich hier einfach fehlerhaft verhält?

mjustin 5. Jun 2014 13:59

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
U_BUFFER_OVERFLOW_ERROR with "ß"

könnte passen ...

Koloss 5. Jun 2014 14:18

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!
 
Zitat:

Zitat von greenmile (Beitrag 1261479)
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz