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
Seite 1 von 2  1 2      
Koloss

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

Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13:00
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;

Geändert von Koloss ( 5. Jun 2014 um 13:05 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13:07
Zitat:
mit dem 'ß' klappt es nicht!
Was passiert denn? (die vorstellbare Bandbreite reicht von 'Text bleibt unverändert' bis 'Warpkernbruch'
Michael Justin
  Mit Zitat antworten Zitat
matthiaskary

Registriert seit: 28. Okt 2013
Ort: Hamburg
24 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13:13
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.
  Mit Zitat antworten Zitat
Koloss

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

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13: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
 
#5

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13: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
TiGü

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

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 13: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, 14: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.197 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 14: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.006 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

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

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

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

AW: Firemonkey TUpper funktioniert nicht mit 'ß'!

  Alt 5. Jun 2014, 15: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
Antwort Antwort
Seite 1 von 2  1 2      


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 05:45 Uhr.
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