AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

(gelöst) ISO8859 nach UnicodeString

Ein Thema von christophspaeth · begonnen am 9. Jul 2012 · letzter Beitrag vom 10. Jul 2012
Antwort Antwort
christophspaeth

Registriert seit: 7. Mär 2008
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

(gelöst) ISO8859 nach UnicodeString

  Alt 9. Jul 2012, 17:49
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
Christoph Späth

Geändert von christophspaeth (10. Jul 2012 um 10:01 Uhr) Grund: "(gelöst)" zum titel hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ISO8859 nach UnicodeString

  Alt 9. Jul 2012, 17:58
Du kannst beim RawByteString (oder beim AnsiString) über Delphi-Referenz durchsuchenSetCodePage die CodePage ändern.

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 9. Jul 2012 um 18:00 Uhr)
  Mit Zitat antworten Zitat
christophspaeth

Registriert seit: 7. Mär 2008
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: ISO8859 nach UnicodeString

  Alt 9. Jul 2012, 18:28
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
Christoph Späth
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ISO8859 nach UnicodeString

  Alt 9. Jul 2012, 18:41
ISO-8859-1 ist die CodePage 28591 (für 1-9)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: ISO8859 nach UnicodeString

  Alt 9. Jul 2012, 20:58

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?
Die Indy Unit Protocols\IdCharsets enthält Funktionen für das Mapping zwischen Zeichensatznamen zu Codepages.

Delphi-Quellcode:

function FindCharset(const ACharSet: string): TIdCharset;
function CharsetToCodePage(const ACharSet: TIdCharSet): Word; overload;
function CharsetToCodePage(const ACharSet: String): Word; overload;
Gefunden zwischen anderen Tipps hier: How do I get a HTTP charset name from current Windows locale?
Michael Justin

Geändert von mjustin ( 9. Jul 2012 um 21:50 Uhr)
  Mit Zitat antworten Zitat
christophspaeth

Registriert seit: 7. Mär 2008
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

(gelöst) ISO8859 nach UnicodeString

  Alt 10. Jul 2012, 10:00
Hallo,

danke für die Antworten. Ich werde die Indy-Funktion CharsetToCodePage für diese Problemstellunge verwenden.


ISO-8859-1 ist die CodePage 28591 (für 1-9)
Kleine Anmerkung falls jemand 8859-15 sucht:
Laut der IdCharsets ist 28605 der Wert für ISO-8859-15 , es geht also anscheinend nach der 9 einfach weiter...

Gruß Chris
Christoph Späth
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: (gelöst) ISO8859 nach UnicodeString

  Alt 10. Jul 2012, 11:04
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:13 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