AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Charater Definition nicht konsistent Char&AnsiChar

Charater Definition nicht konsistent Char&AnsiChar

Ein Thema von ma2xx · begonnen am 12. Jan 2012 · letzter Beitrag vom 12. Jan 2012
Antwort Antwort
ma2xx

Registriert seit: 25. Nov 2005
22 Beiträge
 
#1

Charater Definition nicht konsistent Char&AnsiChar

  Alt 12. Jan 2012, 09:42
Delphi-Version: XE2
Liebe Delphi-Gemeinde,

beim Programmieren mit XE2 bin ich auf folgende Ungereimtheit gestoßen:
Code:
cMyChar1 = 'A';  //    For the compiler is this a Char - OK
cMyChar2  ='§';  //$A7 For the compiler is this a AnsiChar - WHY
cMyChar3  ='¯';  //$AF For the compiler is this a AnsiChar - WHY
Diverse Zeichen interpretiert der Compiler als AnsiChar. Warum?
Das fällt besonders bei Verwendung in Funktionen auf:
Code:
StringOfChar( 'A', 10)
ruft die Funktion
function StringOfChar(Ch: WideChar; Count: Integer): UnicodeString; overload;

StringOfChar( '§', 10)
ruft die Funktion
function StringOfChar(Ch: AnsiChar; Count: Integer): AnsiString; overload;
Der untere Aufruf erzeugt nämlich eine Compilerwarnung wegen implizit cast auf string. Denn in der Regel arbeitet man ja mit strings weiter …

Meine BUG-Meldung bei Embarcadero brachte kein zufriedenstellendes Ergebnis.
http://qc.embarcadero.com/wc/qcmain.aspx?d=102347

Ich bin der Meinung, dass das nicht korrekt ist. Alle „typenlosen“ Character-definitionen sollten in einer UniCode-Welt immer als CHAR kompiliert werden. Was meint Ihr dazu??

Ma2xx

Geändert von ma2xx (12. Jan 2012 um 09:43 Uhr) Grund: Delphi Version korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.145 Beiträge
 
Delphi 12 Athens
 
#2

AW: Charater Definition nicht konsistent Char&AnsiChar

  Alt 12. Jan 2012, 09:45
Untypisierte Konstanten haben keinen festen Typen, drum sind sie ja untypisiert.
Dieser wird erst bei der deren Verwendung bestimmt.

Im Zweifelsfall wird aber meistens der kleinere Typ verwendet.


Chars von #0 bis #$7F werden aber anders behandelt, wie Chars ab #$80 und #$0080 ist nochmals was Anderes.
Bei X <= #127 wird, da die Zeichen eine 1:1-Beziehung zwischen ANSI und Unicode besitzen, das Naheliegenste und nicht das Kleinste verwendet (ab D2009 also Unicode).

#$xx immer ANSI und #$xxxx immer Unicode
#0 bis #127 (oder 'A') im Zweifelsfall Unicode (Unicodeanpassung/-optimierung)
#128 bis #255 (oder '§') im Zweifelsfall ANSI (immer das Kleinere)



Zitat:
WHY
Du hast keinen Typen angegeben, deine PAS ist bestimmt ANSI-kodiert und um einer unkontrollierten Umkodierung zu entgehen, wird eben nicht umkodiert und es bleibt ANSI.
Zeichen ab #128 sind nunmal abhängig von der Codepage und es gibt somit keine direkte Beziehung zwischen ANSI und Unicode.
Unter #128 (7-Bit ASCII) gibt es diese Probleme nicht.


PS: Wenn du hier im Forum mal etwas suchst:
im Deutschen ist #$85 <> #$0085
(ja, ich kenn auch solche Probleme )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Jan 2012 um 10:15 Uhr)
  Mit Zitat antworten Zitat
ma2xx

Registriert seit: 25. Nov 2005
22 Beiträge
 
#3

AW: Charater Definition nicht konsistent Char&AnsiChar

  Alt 12. Jan 2012, 10:53
Es ist für mich trotzdem noch nicht schlüssig.
Der Compiler kennt die CodePage. In den Projektoptionen wird diese zunächst mit 0 vorgespannt. Ich nehmen an, dass dann ein Fallback auf System-CodePage erfolgt.
Eine Änderung der CodePage auf 65001 (UTF-8 Unicode) bewirkt interessanterweise, dass ...
Sizeof(‚§‘) immernoch = 1 ist, aber
StringOfChar(‚§‘, 10) die WideChar-Funktion ruft.

Meiner Meinung nach müsste der Compiler per Default alles auf CHAR kompilieren und dabei die eingestellte CodePage zur Interpretation der Zeichen verwenden.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:28 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