Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Zeichencodierung Mac vs Windows (https://www.delphipraxis.net/194621-zeichencodierung-mac-vs-windows.html)

TigerLilly 13. Dez 2017 14:22

Zeichencodierung Mac vs Windows
 
Ich bin über folgendes Problem gestolpert + etwas ratlos :- (

Mein Programm ist ein Windows-Programm + erzeugt eine Textdatei, die ein Kunde am Mac weiterverarbeiten will. Dazu hat er mir eine Beispieldatei geschickt.

In meiner Windows-Datei ist das "ü" als FC bzw #252 kodiert.
In der Mac-Datei ist das "ü" als 9F bzw #159 kodiert.

Das ist bei den anderen Sonderzeichen ähnlich. Wie konvertiere ich in Delphi meine Strings am besten Mac-kompatibel?
Oder gibt es da eine andere Möglichkeit?

Danke für hilfreichen Input!

Union 13. Dez 2017 14:31

AW: Zeichencodierung Mac vs Windows
 
Das ist Mac OS Roman, CP 10000 unter Windows.

himitsu 13. Dez 2017 15:11

AW: Zeichencodierung Mac vs Windows
 
Wer liest diese Textdatei wieder ein? (womit "weiterverarbeiten")

UTF-8 mit BOM verstehen eigentlich beide Seiten.

TigerLilly 13. Dez 2017 18:00

AW: Zeichencodierung Mac vs Windows
 
Hier wird eine CSV Datei erzeugt, die in Indesign gefüttert wird. Wahrscheinlich gibt es da eh irgendein Format, das die Windows-Codierung lesen kann.

UTF-8 kann ich auch probieren.

Aber ich frag mich, wo sowas noch auftauchen kann.

himitsu 13. Dez 2017 18:58

AW: Zeichencodierung Mac vs Windows
 
Bei Allem mit ANSI und undefinierter CodePage.
In Windows hängt die ANSI-CodePage von der System-Sprache des aktiven Benutzers ab.

TigerLilly 14. Dez 2017 07:03

AW: Zeichencodierung Mac vs Windows
 
Ich habe "Codepage" bisher immer so verstanden, dass die Codepage festlegt, wie Zeichen > 128 dargestellt werden.

Mein Problem ist ja, dass ich ein Windows-ü (#252) habe, das in eine Textdatei schreiben möchte + dort aber ein Mac-ü (#159) stehen soll.

Hilft mir da die LOCALE_IDEFAULTMACCODEPAGE weiter? Kann ich die dargestellten Buchstaben in eine andere Codepage transformieren?

Rollo62 14. Dez 2017 08:24

AW: Zeichencodierung Mac vs Windows
 
Vielleicht hilft dir das weiter:
https://mathiaspannier.wordpress.com...nicode-string/
http://www.delphipraxis.net/169284-g...odestring.html

Was der MAC damit macht kann ich aber nicht sagen.

Rollo

himitsu 14. Dez 2017 10:07

AW: Zeichencodierung Mac vs Windows
 
Delphi-Referenz durchsuchenTEncoding
Und nun rate mal, wozu viele Speicherfunktionen einen Parameter damit besitzen. :zwinker:

Du erstellst dir eine TEncoding-Instanz mit der passenden Codepage und speicherst damit oder kannst damit einen Text konvertieren.


Zitat:

Ich habe "Codepage" bisher immer so verstanden, dass die Codepage festlegt, wie Zeichen > 128 dargestellt werden.

Mein Problem ist ja, dass ich ein Windows-ü (#252) habe, das in eine Textdatei schreiben möchte + dort aber ein Mac-ü (#159) stehen soll.
128 < 252
128 < 159
passt

Nein, es gibt auch Codepages, wo auch Zeichen unterhalb von 128 anders sind.
Und es gibt auch Multibyte-Zeichensätze, angefangen mit UTF-8 und natürlich auch Russische, Chinesische usw., wo es mehr Zeichen gibt und die 128..255 nicht annähernd ausreichen.


Nimm dir mal das Programm Charmap (Zeichentabelle) und schau dir Symbol, Webbings, Wingdings und das berühmte Marlett an.
(Wer erkennt die alten Win3.x und Win9x Icons Symbole von den Buttons der Titelleiste und Scrollbars? :lol:)

TigerLilly 14. Dez 2017 20:48

AW: Zeichencodierung Mac vs Windows
 
Zitat:

TEncoding
Ja das wär´s, aber da gibt's ein Problem: das ist eine Legacy-App mit Delphi 2006 + da gibt es TEncoding noch nicht.

Delphi.Narium 14. Dez 2017 21:17

AW: Zeichencodierung Mac vs Windows
 
Ist hier in Kombination eventuell ein Lösungsansatz zu finden?

https://stackoverflow.com/questions/...th-indy-10-5-9

http://originaldll.com/file/iconv.dll/18968.html

https://dbaportal.eu/2012/10/24/iconv-for-windows/

https://sourceforge.net/projects/get...v-win32/1.9.1/

Redeemer 14. Dez 2017 21:25

AW: Zeichencodierung Mac vs Windows
 
Das ist nicht so schwer:
Code:
StringList.Text := UTF8Encode(StringList.Text);
StringList.SaveToFile('bla.txt');

Delphi.Narium 14. Dez 2017 21:33

AW: Zeichencodierung Mac vs Windows
 
Wenn ich das recht verstanden habe, wird im Zielsystem ein Zeichensatz für den MAC erwartet und kein UFT8.

Wenn man also aus 'ner Delphi-2006-Zeichenfolge UTF8 macht, braucht man immernoch eine Umwandlung von UFT8 auf den MAC-Zeichensatz. Müsste in die "Konvertierkette" also noch 'nen MAC einbauen, bzw. die gelieferten Dateien auf dem MAC erst noch konvertieren.

Bin als Kunde jetzt aber mal dreist: Ich erwarte vom Lieferanten den von mir gewünschten Zeichensatz. Der Zweizeiler wäre hier daher (vermutlich) nur die halbe Miete. Oder hab' ich die Aufgabenstellung nicht verstanden?

himitsu 14. Dez 2017 21:48

AW: Zeichencodierung Mac vs Windows
 
UTF-8 war unter der Annahme, dass das ZielSystem damit auch umgehen kann.


MSDN-Library durchsuchenMultiByteToWideChar
MSDN-Library durchsuchenWideCharToMultiByte

Erstmal deinen Text nach Unicode (WideString vor Delphi 2009) und dann in die gewünschte CodePage.
ANSI mit Codepage X > Unicode (WideChar) > ANSI mit Codepage Y
Ab Delphi 2009 hast du bereits standardmäßig Unicode und der erste Schritt kann entfallen, außer man hat explizit AnsiString gearbeitet, dann ändert sich nichts.


Zitat:

StringList.Text := UTF8Encode(StringList.Text);
Und ab Delphi 2009 raucht dieser Code dann grandios ab.

p80286 14. Dez 2017 22:56

AW: Zeichencodierung Mac vs Windows
 
Habe ich da was falsch verstanden? Es geht darum einen 8Bit Zeichensatz in einen anderen zu überführen.
Wie wäre es dann mit
Delphi-Quellcode:
case byte(inchar) of
  259 : outchar:=159;
  etc.
end;
oder gleich eine Übersetzungstabelle:
Delphi-Quellcode:
var
  ubersetzungstabelle = Array [0..255] of Byte;

ubersetzungstabelle[259]:=159;
...
macstring:=winstring;
for i:=1 to length(macstring) do
  Byte(macstring[i]):=ubersetzungstabelle[byte(macstring[i]);
Solange eine 1:1 Umsetzung möglich ist, sollte das funktionieren.

Gruß
K-H

TigerLilly 15. Dez 2017 07:21

AW: Zeichencodierung Mac vs Windows
 
Ja, die Übersetzungstabelle ist das Gespenst, vor dem ich davonlaufen wollte. :-)

Höchste Zeit D2006 loszuwerden.

Danke für die Tipps!


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