![]() |
(gelöst) ISO8859 nach UnicodeString
Hallo,
ich schlage mich gerade damit rum, unseren Code von Delphi 2006 auf XE2 zu portieren und habe an der einen oder anderen Stelle Probleme mit Unicode bzw. Zeichensätzen. Momentan habe ich folgendes Problem: Ich lese eine Datei (MIME-ähnlich Struktur) erstmal in RawByteStrings. Nun habe ich Stellen, an denen im Text der charset steht (u.a. auch gemäß RFC1522 =?ISO8859-15?Q?hall=F6?=). Ein komplettes Einlesen mit einem angegebenen Encoding scheidet zum einen aus, weil das encoding eben erst in der Datei steht und zum anderen könnten theoretisch mehere Encodings verwendet werden. Bisher haben wir dafür DIConverters und DIUnicode verwendet, aber wenn es da schon im Delphi was sinnvolles gibt, würde ich gerne auf Bordmittel zurückgreifen. Zwar habe ich die Funktion SetCodePage gefunden, weiß aber nicht, wie ich von den Text 'ISO-8859-15' oder auch 'KOI8' auf den Wert für die Codepage komme oder ob Delphi evtl. nur Windows Codepages unterstützt. Also die konkrete Frage: Gibt es irgendwo eine Liste mit den unterstützen Codepages bzw. eine Funktion, die mir aus dem Text 'ISO-8859-15' die Codepage für SetCodepage liefert? Danke für's lesen! Chris |
AW: ISO8859 nach UnicodeString
Du kannst beim RawByteString (oder beim AnsiString) über
![]() Also den Teilstring aus deinem großen String rauskopieren, die CodePage ändrn und dann ganz normal weiterbenutzen, wobei Delphi hier nun die gewünschte CodePage verwendet, wenn man diesen String in einen String/UnicodeString kopiert, bzw. an einen Parameter/Property übergibt. (das Convert muß aber auf False gesetzt werden) Ein AnsiString ist praktisch ein RawByteString mit CP_ACP als CodePage, der Utf8String mit CP_UTF8 und der UnicodeString mit UTF-16. |
AW: ISO8859 nach UnicodeString
Hallo himitsu,
danke für deine Antwort. Das mit SetCodePage hatte ich schon rausgefunden und das ist auch wie (etwas versteckt, ich gebs zu) geschrieben mein Lösungsansatz. Leider weiß ich nicht, wie ich an den richtigen Parameter Codepage dafür komme und finde in der Hilfe auch nichts. Ich kann zwar im Fall UFT-8 die Codepage auf CP_UTF8 setzen (oder gleich UTF8ToString() verwenden) und bei Windows oder OEM-Codepages (glaube ich) einfach den numerischen Teil verwenden, aber für ISO-8859-X bin ich etwas ratlos. Gruß Chris |
AW: ISO8859 nach UnicodeString
ISO-8859-1 ist die CodePage 28591 (für 1-9)
|
AW: ISO8859 nach UnicodeString
Zitat:
Delphi-Quellcode:
Gefunden zwischen anderen Tipps hier: function FindCharset(const ACharSet: string): TIdCharset; function CharsetToCodePage(const ACharSet: TIdCharSet): Word; overload; function CharsetToCodePage(const ACharSet: String): Word; overload; ![]() |
(gelöst) ISO8859 nach UnicodeString
Hallo,
danke für die Antworten. Ich werde die Indy-Funktion CharsetToCodePage für diese Problemstellunge verwenden. Zitat:
Laut der IdCharsets ist 28605 der Wert für ISO-8859-15 , es geht also anscheinend nach der 9 einfach weiter... Gruß Chris |
AW: (gelöst) ISO8859 nach UnicodeString
Das war nur das, was ich im Kopf hatte. Es gibt ja auch noch andere ISOs, außer der 8859 und da sind die Zuordnungen nicht so einfach.
In meinem kleinen himXML (in der himxml.pas) hatte ich auch noch ein paar andere Charsets. Das mit dem CharsetToCodePage klingt ja nicht so gut, aber ich glaub das bau ich dort nicht direkt ein, da dann nur deswegen das Indy dort mit reinrutscht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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