AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Dauerbrenner Umlaute: Lazarus vs. Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Dauerbrenner Umlaute: Lazarus vs. Delphi

Ein Thema von Phillie08 · begonnen am 26. Aug 2013 · letzter Beitrag vom 27. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
Phillie08

Registriert seit: 19. Jan 2011
13 Beiträge
 
#1

Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 19:41
Hallo,

da mir schon einmal hier geholfen werden konnte, als es um Umlaute ging, versuche ich mein Glück erneut.
Ich schreibe ein Programm, bei dem einzelne Buchstaben verarbeitet werden müssen, die Algorithmen sind kein Problem, aber Lazarus weigert sich zu kompilieren.
Hier ist ein winziger (und schwachsinniger), aber entscheidender Code-Schnipsel:
Code:
procedure test;
var
  Z: char;
begin
  Z := 'a';
  Z := 'ß'; //Hier wird Fehler gefunden, ebenso nächste Zeile
  Z := 'ö';
end;
In Delphi funktioniert das, Lazarus meldet folgenden Fehler:
Code:
unit1.pas(48,8) Error: Incompatible types: got "Constant String" expected "Char"
Offenbar wird 'ä' usw. nicht als Zeichen, sondern als Zeichenkette interpretiert.
Ich schätze, dass da wieder mal diese UTF-Geschichte herein spielt.
Ob wohl jemand eine Idee hat, wie ich es hin bekommen könnte, Umlaute und ß als Einzelzeichen verarbeiten zu können? Der Umweg über ä=ae geht natürlich immer, ist hier aber ausdrücklich nicht erwünscht.

Ich arbeite mit Lazarus 1.0.8 unter Windows.
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 20:36
High Ascii wird in Fpc als String interpretiert.

Warum nicht:
Delphi-Quellcode:
procedure test;
var
  Z: string;
begin
  Z := 'a';
  Z := 'ß'; //Hier wird Fehler gefunden, ebenso nächste Zeile
  Z := 'ö';
end;
Gruß
Cookie
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 20:41
Im Lazarus-Forum habe ich die Funktion UTFToChr gefunden. Vielleicht hilft dir die:
Delphi-Quellcode:
function UTFToChr(const s: string): char;
begin
  if s='then result:=char(0)
  else begin
    {$IFnDEF fpc}result:=s[1];{$ELSE}
    case byte(s[1]) of
      194: result:=char((byte(s[2])-163)+128);
      195: result:=char((byte(s[2])-130)+160);
      226: result:=char(255);
      else result:=s[1];
    end;{$ENDIF}
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Z: char;
begin
  Z := 'a';
  Z := UTFToChr('ß'); //Hier wird Fehler gefunden, ebenso nächste Zeile
  Z := UTFToChr('ö');
end;
Zumindest kompiliert Lazarus so den Code.
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 20:48
Da kannst du die Chars dann gleich mit dem Ascii Code aufrufen. Im Falle von ß dann #225;
Gruß
Cookie
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 21:08
Hi !
Delphi-Quellcode:
uses LCLType;

procedure test;
var
  Z: TUTF8Char;
begin
  Z := 'a';
  Z := 'ß';
  Z := 'ö';
end;
wäre auch ne Möglichkeit.

MfG
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#6

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 21:46
Kennt Lazerus keine AnsiChar? Denn Du willst ja AnsiChar (1 Byte Chars) und keine MultiByteChars bearbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 22:57
AnsiChar = Char. Das ist nur Low Ascii. Alles über 128 wird als Sting interpretiert.
Gruß
Cookie

Geändert von cookie22 (26. Aug 2013 um 22:59 Uhr)
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#8

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 26. Aug 2013, 23:34
Wenn Lazerus AnsiChar als 7bitASCII interpretiert, geht aber auch #228 nur als 2-Byte Char oder string.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 27. Aug 2013, 08:29
Das Problem ist nicht Lazarus, sondern wie FPC die Zeichenkodierung der Quelltextdatei handhabt. Ist eine Datei im UTF8 Format (mit oder ohne BOM), dann interpretiert FPC den Quelltext dementsprechend und dann werden auch Konstanten als UTF8 behandelt (dabei wird 'ß' zu mehr als einem Byte). Wenn du nun die Kodierung von UTF8 auf z. B. 1252 (deutsche Standardcodepage unter Windows) änderst (geht in Lazarus per Rechtsklick im Editor unter Dateieinstellungen => Zeichenkodierung) , dann kompiliert der Code wieder (du solltest deinen Algorithmus dann aber in eine eigene Unit auslagern, da sonst Zuweisungen wie Edit1.Text := 'Groß' wiederum für Probleme sorgen, da die LCL mit UTF8 arbeitet).
Alternativ kannst du die oben erwähnte UTF8ToChar -Funktion verwenden.

Ansonsten vielleicht auch mal die Artikel hier im Lazarus/FPC Wiki durchlesen.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Dauerbrenner Umlaute: Lazarus vs. Delphi

  Alt 27. Aug 2013, 09:34
Stellst du den Editor auf ansi(cp1252), kannst du die Ausgabe wie folgt machen:
Delphi-Quellcode:
uses LConvEncoding;

procedure TForm1.Button1Click(Sender: TObject);
var
  Z: Char;
begin
  Z := 'ö';
  label1.caption := CP1252ToUTF8(Z);
end;
MfG
  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 10:44 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