Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Delphi XE/XE2 Probleme mit UTF-8 Editor (https://www.delphipraxis.net/163056-delphi-xe-xe2-probleme-mit-utf-8-editor.html)

Mavarik 14. Sep 2011 10:04

Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Hallo Zusammen!

Hab mal nen neuen Thread aufgemacht. Thema war:

Ein Probleme zeigen sich in den *.pas Dateien die jetzt auch als UTF-8 weggeschrieben werden...

Dadurch gehen alle Sonderzeichen in Strings verloren...
Besonders ärgerlich!

Dafür hab ich noch keine Lösung, außer 2Mio Konstanten in den Source-Code bauen...
Ganz toll... Hat warscheinlich wieder keiner drüber nachgedacht...

Beispiel:

In einem String oder Procedure Aufruf steht:

DoPrinter('Û011<-Das ist eine Umschaltsequenz für den Printer'); Eigentlich steht da nach EBCDIC (DOS Zeichensatz) #219+'011'... Das 219er war halt der Ersatz für z.B. ESC Sequenzen an Nadeldrucker...
Das wird konvertiert in $C3 $9B '011' <- UTF-8

Genauso die Umlaute werden in den (Const)-Strings in UTF-8 umgeformt... Damit kann der Nadeldrucker auch nix anfangen...Natürlich werden diese im IDE-Editor dann auch falsch Dargestellt weil EBCDIC Zeichen nicht richtig dargestellt werden!


Grüsse Mavarik :coder:

Bernhard Geyer 14. Sep 2011 10:07

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Gibt doch den String als $xx-Wert an. Evtl. bringt ein vorgesetztes AnsiString() auch was bringen.

Mavarik 14. Sep 2011 10:34

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1124236)
Gibt doch den String als $xx-Wert an. Evtl. bringt ein vorgesetztes AnsiString() auch was bringen.

Es geht ja nicht um ein Verhalten zur Laufzeit... Das AnsiString() bringt daher nix, da beim abspeichern der *.pas Files de Zeichen schon konvertiert werden...

Mavarik

Bernhard Geyer 14. Sep 2011 10:37

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Zitat:

Zitat von Mavarik (Beitrag 1124246)
Es geht ja nicht um ein Verhalten zur Laufzeit... Das AnsiString() bringt daher nix, da beim abspeichern der *.pas Files de Zeichen schon konvertiert werden...

Ich meine das du das bei der Definition der Konstante mit angiebst.
Bei D6 und dem Nicht-Unicode-Editor habe ich so Widestrings als Konstanten definieren können.

Uwe Raabe 14. Sep 2011 11:03

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Vielleicht hab ich da ja was falsch verstanden, aber ich arbeite sehr bequem mit EBCDIC in der IDE:

Delphi-Quellcode:
const
  cEBCDICCodePage = 1141;

type
  EBCDICString = type AnsiString(cEBCDICCodePage);

const
  cTest: EBCDICString = 'Hallo Welt';

procedure Test(const Value: EBCDICString);
var
  F: TFileStream;
begin
  F := TFileStream.Create('c:\temp\test.dat', fmCreate);
  try
    F.Write(Value[1], Length(Value));
  finally
    F.Free;
  end;
end;

begin
  Test(cTest); // geht genauso wie
  Test('Hello World'); // in beiden Fällen wird EBCDIC in den Stream geschrieben
end.

Mavarik 14. Sep 2011 11:42

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Liste der Anhänge anzeigen (Anzahl: 4)
Zitat:

Zitat von Uwe Raabe (Beitrag 1124259)
Vielleicht hab ich da ja was falsch verstanden, aber ich arbeite sehr bequem mit EBCDIC in der IDE:

Delphi-Quellcode:
const
  cTest: EBCDICString = 'Hallo Welt';

Klar Du nimmst in Deinem Beispiel auch nur Zeichen die im Ascii Bereich sind.

Wenn Du mit ALT+0219 mal den großen Block (EBCDIC) rein copierst.. Bekommst Du das "Û" im Delphi Editor (z.b. Dephi 6)
Das gleiche gilt für die Umlaute.

Lad die Datei in XE/XE2 und die Zwiechen werden anch UTF-8 codiert... Damit ist der String unbrauchbar!

Zum Test kannst Du die IDE mal auf den Font Terminal umschalten..

Ich hab mal je 2 Vorher/Nachher Grafiken angefügt.

Mavarik

PS.: Hundert-Tausende zeilen Source-Code stammen aus den Jahr 1986-19xx, noch aus den Zeiten von Turbo-Pascal.

Bernhard Geyer 14. Sep 2011 12:08

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Kannst du denn nicht definieren das die entsprechende Quelldatei nicht UTF8 gespeichert wird? da gabs doch mal was ...

himitsu 14. Sep 2011 12:11

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Das UTF-8 in der Datei ist vollkommen egal, da es beim Compilieren wieder dekodiert wird.

Arbeite lieber mit einem Byte-Array oder schreibe die Zeichen einzeln in die Chars des AnsiStrings.

Uwe Raabe 14. Sep 2011 13:28

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Zitat:

Zitat von Mavarik (Beitrag 1124268)
Klar Du nimmst in Deinem Beispiel auch nur Zeichen die im Ascii Bereich sind.

Wenn Du mit ALT+0219 mal den großen Block (EBCDIC) rein copierst.. Bekommst Du das "Û" im Delphi Editor (z.b. Dephi 6)
Das gleiche gilt für die Umlaute.

Also

Delphi-Quellcode:
const
  cTest: EBCDICString = 'Hallöle Welt';
funktioniert hier auch tadellos.

Was ich nicht nachvollziehen kann ist der große Block unter #219. Laut EBCDIC-Tabelle Codepage 1141 entspricht #219 einem "û" (Unicode-#00FB). Schreibe ich jetzt einen String mit einem "û" im Delphi-Editor und übergebe diesen an die Test-Routine, erfolgt automatisch eine Konvertierung nach EBCDIC und alles ist wieder im grünen Bereich. So erzeugt z.B. der Text "ûHallöle" die Byte-Folge "DC C8 81 93 93 6A 93 85", was auf einem IBM-Großrechner-Terminal dann auch korrekt als "ûHallöle" dargestellt wird.

himitsu 14. Sep 2011 13:36

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Wobei die Umwandlung von Unicode/UTF-8 nach ANSI vom jeweiligen System abhängt, also von dessen Standard-Codepage.

Und somit ist soeine Umwandlung nicht immer Bytegenau möglich, wenn die Umwandlung erst auf den Zielsystem (zur Laufzeit) geschieht.

BUG 14. Sep 2011 14:05

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1124296)
So erzeugt z.B. der Text "ûHallöle" die Byte-Folge "DC C8 81 93 93 6A 93 85", was auf einem IBM-Großrechner-Terminal dann auch korrekt als "ûHallöle" dargestellt wird.

Ich glaube, möchte er nicht, dass ein Û dargestellt wird, sondern es als Escapezeichen benutzten:
Zitat:

Zitat von Mavarik (Beitrag 1124233)
DoPrinter('Û011<-Das ist eine Umschaltsequenz für den Printer'); Eigentlich steht da nach EBCDIC (DOS Zeichensatz) #219+'011'... Das 219er war halt der Ersatz für z.B. ESC Sequenzen an Nadeldrucker...

Das hardcoden solcher Strings ist imho nicht das Gelbe vom Ei (ein
Delphi-Quellcode:
printer.doDasWasDieSequenzTut()
wäre wohl netter, damit wäre der Drucker auch besser austauschbar.).

Aber wenn du darauf baust, müsste sich doch eigentlich eine Ansi-Codierung (und damit die richtige Bytesequenz) erzwingen lassen :gruebel:

Zitat:

Zitat von Mavarik (Beitrag 1124246)
Es geht ja nicht um ein Verhalten zur Laufzeit... Das AnsiString() bringt daher nix, da beim abspeichern der *.pas Files de Zeichen schon konvertiert werden...

Wie das im Code gespeichert wird ist doch egal. Hauptsache zur Laufzeit stimmt es. Selbst wenn du es zur Laufzeit zu Ansi umcodieren müsstest.

Mavarik 14. Sep 2011 16:05

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Also!

Danke für Eure Ideen... Soweit.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1124272)
Kannst du denn nicht definieren das die entsprechende Quelldatei nicht UTF8 gespeichert wird? da gabs doch mal was ...

Das wäre ne Idee... Wo?

Zitat:

Zitat von himitsu (Beitrag 1124297)
Wobei die Umwandlung von Unicode/UTF-8 nach ANSI vom jeweiligen System abhängt, also von dessen Standard-Codepage. Und somit ist soeine Umwandlung nicht immer Bytegenau möglich, wenn die Umwandlung erst auf den Zielsystem (zur Laufzeit) geschieht.

Somit keine Lösung ich werde warscheinlich alle Anweisungen umbauen..

Beispiel : PrintStr(#219+'011 Text '+#219+'001'); usw..

Zitat:

Zitat von BUG (Beitrag 1124307)
Ich glaube, möchte er nicht, dass ein Û dargestellt wird, sondern es als Escapezeichen benutzten:

Das hardcoden solcher Strings ist imho nicht das Gelbe vom Ei (ein
Delphi-Quellcode:
printer.doDasWasDieSequenzTut()
wäre wohl netter, damit wäre der Drucker auch besser austauschbar.).

Aber wenn du darauf baust, müsste sich doch eigentlich eine Ansi-Codierung (und damit die richtige Bytesequenz) erzwingen lassen :gruebel:

Damit der Printer austauschbar ist werden alle Sequenzen so konvertiert. #219 für jetzt kommt ne Umschalt-Ssequenz und dann 3 Zahlen für was...

(Der Code ist 20 Jahr alt... Nix Canvas.... Direkt-Copy an den Printerport... Am Windows vorbei Hardcoded EPSON ESC/2 Befehle... usw...

Mittlerweile gibtes einen Emulator der die Sequenzen wieder Umsetzt in einen Canvas-Printer...

Zitat:

Zitat von Uwe Raabe (Beitrag 1124296)
Was ich nicht nachvollziehen kann ist der große Block unter #219. Laut EBCDIC-Tabelle Codepage 1141 entspricht #219 einem "û" (Unicode-#00FB).

Schöne Tabellen.... Mach mal nen CMD auf und tippe <ALT festhalten>219<Alt loslassen>

Es geht um den "alten" DOS Zeichensatz...

Aber abgesehen von meinem "Printer-Problem" habt Ihr diese Probleme nicht? Non-Ascii Zeichen in String-Konstaten?
Kaum zu glauben...

Mavarik

Bernhard Geyer 14. Sep 2011 16:09

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Zitat:

Zitat von Mavarik (Beitrag 1124360)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1124272)
Kannst du denn nicht definieren das die entsprechende Quelldatei nicht UTF8 gespeichert wird? da gabs doch mal was ...

Das wäre ne Idee... Wo?

Im Texteditor, Kontextmenu, Eintrag "Dateiformat". Dort auf ANSI stellen.

Mavarik 14. Sep 2011 16:16

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1124361)
Im Texteditor, Kontextmenu, Eintrag "Dateiformat". Dort auf ANSI stellen.

Danke!!!! Das war die Lösung.... Funktioniert!

Jetzt muss ich "nur" noch Delphi/GXperts abgewöhnen das um zu stellen...

Mavarik

Uwe Raabe 14. Sep 2011 16:26

AW: Delphi XE/XE2 Probleme mit UTF-8 Editor
 
Zitat:

Zitat von Mavarik (Beitrag 1124360)
Schöne Tabellen.... Mach mal nen CMD auf und tippe <ALT festhalten>219<Alt loslassen>

Es geht um den "alten" DOS Zeichensatz...

Und warum schreibst du dann EBCDIC? Das hat doch mit dem IBM-DOS-Zeichensatz gar nichts zu tun. EBCDIC wird doch nur auf IBM-Großrechnern verwendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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