![]() |
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! |
AW: Zeichencodierung Mac vs Windows
Das ist Mac OS Roman, CP 10000 unter Windows.
|
AW: Zeichencodierung Mac vs Windows
Wer liest diese Textdatei wieder ein? (womit "weiterverarbeiten")
UTF-8 mit BOM verstehen eigentlich beide Seiten. |
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. |
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. |
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? |
AW: Zeichencodierung Mac vs Windows
Vielleicht hilft dir das weiter:
![]() ![]() Was der MAC damit macht kann ich aber nicht sagen. Rollo |
AW: Zeichencodierung Mac vs Windows
![]() 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:
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:) |
AW: Zeichencodierung Mac vs Windows
Zitat:
|
AW: Zeichencodierung Mac vs Windows
Ist hier in Kombination eventuell ein Lösungsansatz zu finden?
![]() ![]() ![]() ![]() |
AW: Zeichencodierung Mac vs Windows
Das ist nicht so schwer:
Code:
StringList.Text := UTF8Encode(StringList.Text);
StringList.SaveToFile('bla.txt'); |
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? |
AW: Zeichencodierung Mac vs Windows
UTF-8 war unter der Annahme, dass das ZielSystem damit auch umgehen kann.
![]() ![]() 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:
|
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:
oder gleich eine Übersetzungstabelle:
case byte(inchar) of
259 : outchar:=159; etc. end;
Delphi-Quellcode:
Solange eine 1:1 Umsetzung möglich ist, sollte das funktionieren.
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]); Gruß K-H |
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 22:00 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 by Thomas Breitkreuz