Unicode, Zeichenkodierung ermitteln
Unicode, Zeichenkodierung ermitteln
Hallo,
ich habe folgenden Ansistring, der aus einem E-Mail Header stammt:
=?utf-8?B?0JjQvdGC0LXRgNC90LXRgiDQv9GA0L7QvNC+0YPRiNC9INCm0LXQvdGLINGD0L/QsNC70Lgh?=
Gibt es eine Funktion, mit deren Hilfe ich erkennen kann, daß das z. B. kyrillisch ist?
Gruß, Bernd.
ich habe folgenden Ansistring, der aus einem E-Mail Header stammt:
=?utf-8?B?0JjQvdGC0LXRgNC90LXRgiDQv9GA0L7QvNC+0YPRiNC9INCm0LXQvdGLINGD0L/QsNC70Lgh?=
Gibt es eine Funktion, mit deren Hilfe ich erkennen kann, daß das z. B. kyrillisch ist?
Gruß, Bernd.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Unicode, Zeichenkodierung ermitteln
Ich bin kein Unixcode-Experte_Bernd hat geschrieben:Gibt es eine Funktion, mit deren Hilfe ich erkennen kann, daß das z. B. kyrillisch ist?



Aber ich vermute, es gibt eine Funktion mit der man UTF-8 in 32 Bit Unictode übersetzen kann.
Ich vermute weiter, dass im Unicode "Adressraum" Bereiche für verschiedene Sprachen existieren.
Wenn Du also mit der 32 Bit Unicode-Zeichen eine Statistik machst, in welchen Sprachbereich die meisten davon fallen, die nicht < 128 (also ASCII) sind, solltest Du die Sprache mit einer bestimmten Sicherheit ermitteln können. Sie Sicherheit kannst Du daran ermessen, wie viele % der Zeichen > 128 tatsächlich in diesem Sprach-Adressraum landen.
Dann gib's natürlich noch die ganz schrecklichen Unicode-Features wie Surrogate-Pairs (anscheinend hauptsächlich bei Appel benutzt). Ich weiß nicht, ob es eine Standard-Funktion gibt, die die eliminieren kann
P.S.: Die Sprach-Adressraum-Bereiche sind leider nicht unbedingt zusammenhängend.
Hier sind einiger zu finden: http://unicode.e-workers.de/deutsch.php" onclick="window.open(this.href);return false;
z.B Kyrillisch: http://unicode.e-workers.de/kyrillisch.php" onclick="window.open(this.href);return false;
-Michael
Re: Unicode, Zeichenkodierung ermitteln
Danke für Deine Antwort.
Ich hatte schon fast befürchtet, daß die Sache komplizierter wird, als zunächst angenommen.
Gruß, Bernd.
Ich hatte schon fast befürchtet, daß die Sache komplizierter wird, als zunächst angenommen.

Gruß, Bernd.
Re: Unicode, Zeichenkodierung ermitteln
Das ist wahrsch. in erster Linie gar noch kein Unicode, sondern irgendwas Base64 oder sonstwie verschlüsseltes.
http://de.wikipedia.org/wiki/Base64" onclick="window.open(this.href);return false;
Ich weiss nicht genau ob die FCL auch, aber Synapse bietet solche Funktionen:
http://synapse.ararat.cz/doc/help/synacode.html" onclick="window.open(this.href);return false; DecodeBase64
Wenn das mal dekodiert ist, kannst du den Range der enthaltenen Zeichen anschauen.
Schau mal meinen Beitrag in der IDE an, damit du siehst wie das gehen könnte:
Bearbeiten -> Aus der Zeichentabelle einfügen - > Unicode Tab
Dort siehst du die Bereiche z.B. für kyrillisch.
S.a meine Beiträge:
http://www.lazarusforum.de/viewtopic.php?p=17966#p17966" onclick="window.open(this.href);return false;
http://www.lazarusforum.de/viewtopic.php?p=17986#p17986" onclick="window.open(this.href);return false;
http://de.wikipedia.org/wiki/Base64" onclick="window.open(this.href);return false;
Ich weiss nicht genau ob die FCL auch, aber Synapse bietet solche Funktionen:
http://synapse.ararat.cz/doc/help/synacode.html" onclick="window.open(this.href);return false; DecodeBase64
Wenn das mal dekodiert ist, kannst du den Range der enthaltenen Zeichen anschauen.
Schau mal meinen Beitrag in der IDE an, damit du siehst wie das gehen könnte:
Bearbeiten -> Aus der Zeichentabelle einfügen - > Unicode Tab
Dort siehst du die Bereiche z.B. für kyrillisch.
S.a meine Beiträge:
http://www.lazarusforum.de/viewtopic.php?p=17966#p17966" onclick="window.open(this.href);return false;
http://www.lazarusforum.de/viewtopic.php?p=17986#p17986" onclick="window.open(this.href);return false;
Zuletzt geändert von theo am Mi 24. Feb 2010, 14:08, insgesamt 1-mal geändert.
Re: Unicode, Zeichenkodierung ermitteln
ja, ist ist noch "mime"(base64) usw. codiert..
ich würd vorschlagen irgendetwas zu verwenden dass damit umgehen kann
indy (idMessage) z.b.
oder auch nur mal DecodeHeader in IdCoderHeader
anschauen..
(ob das unter lazarus alles funktioniert, weiß ich nicht, in delphi sollte es ..)
@_bernd: kyrillisch
es ist NICHT kyrillisch (IMHO) sonder uft-8... da kann ALLES zugleich drinnen sein, kyrillisch , chinesisch ja sogar umlaute und scharfe ß
ich würd vorschlagen irgendetwas zu verwenden dass damit umgehen kann
indy (idMessage) z.b.
oder auch nur mal DecodeHeader in IdCoderHeader
anschauen..
(ob das unter lazarus alles funktioniert, weiß ich nicht, in delphi sollte es ..)
@_bernd: kyrillisch
es ist NICHT kyrillisch (IMHO) sonder uft-8... da kann ALLES zugleich drinnen sein, kyrillisch , chinesisch ja sogar umlaute und scharfe ß
Re: Unicode, Zeichenkodierung ermitteln
Also das geht mit der Unit SynaCode:
DecodeBase64('?0JjQvdGC0LXRgNC90LXRgiDQv9GA0L7QvNC+0YPRiNC9INCm0LXQvdGLINGD0L/QsNC70Lgh?=');
=?utf-8?B musst du wegschneiden. (Siehe hier was das bedeutet: http://search.cpan.org/~dankogai/Encode ... .pm#___top" onclick="window.open(this.href);return false; )
Da kommt das raus:
Интернет промоушн Цены упали!
Also kyrillisch plus basic latin.
DecodeBase64('?0JjQvdGC0LXRgNC90LXRgiDQv9GA0L7QvNC+0YPRiNC9INCm0LXQvdGLINGD0L/QsNC70Lgh?=');
=?utf-8?B musst du wegschneiden. (Siehe hier was das bedeutet: http://search.cpan.org/~dankogai/Encode ... .pm#___top" onclick="window.open(this.href);return false; )
Da kommt das raus:
Интернет промоушн Цены упали!
Also kyrillisch plus basic latin.
Re: Unicode, Zeichenkodierung ermitteln
ja, aber wie hast Du das jetzt erkannt?theo hat geschrieben: Da kommt das raus:
Интернет промоушн Цены упали!
Also kyrillisch plus basic latin.
Ich habe mal den Hex-Dump des Strings angehängt. Könnte man das jetzt auch auf Anhieb aufgrund des Dumps sagen?
Gruß, Bernd.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Unicode, Zeichenkodierung ermitteln
Das kannst du aus diesem String ableiten ? Nicht übel... ich sehe keinen Zusammenhang.....Интернет промоушн Цены упали!
Also kyrillisch plus basic latin.
MFG
Michael Springwald
Michael Springwald
Re: Unicode, Zeichenkodierung ermitteln
kyrilsch ist wohl 0400-04FF
http://de.wikipedia.org/wiki/Unicode-Block_Kyrillisch" onclick="window.open(this.href);return false;
was es laut meinem hex editor auch ist (1804 3D04 usw)
http://de.wikipedia.org/wiki/Unicode-Block_Kyrillisch" onclick="window.open(this.href);return false;
was es laut meinem hex editor auch ist (1804 3D04 usw)
Re: Unicode, Zeichenkodierung ermitteln
Nein, das =?utf-8?B sagt dir das. Siehe meinen Link den ich oben noch angehängt habe: http://search.cpan.org/~dankogai/Encode ... .pm#___top" onclick="window.open(this.href);return false;_Bernd hat geschrieben: Ich habe mal den Hex-Dump des Strings angehängt. Könnte man das jetzt auch auf Anhieb aufgrund des Dumps sagen?
Oder meintest du das bereits dekodierte? Da habe ich oben auch die Methode verlinkt.
http://www.lazarusforum.de/viewtopic.php?p=17966#p17966" onclick="window.open(this.href);return false;
http://www.lazarusforum.de/viewtopic.php?p=17986#p17986" onclick="window.open(this.href);return false;
Re: Unicode, Zeichenkodierung ermitteln
@theo, ja der dekodierte String war gemeint.
Und vielen Dank an alle. Ich denke, ich komme jetzt weiter.
Gruß, Bernd.
Und vielen Dank an alle. Ich denke, ich komme jetzt weiter.
Gruß, Bernd.
Re: Unicode, Zeichenkodierung ermitteln
@theo
ganz "astrein" ist das verlinkte aber nicht (wie alles was mit lazaruns und uni... ach lassen wir das thema..)
(S:$10100;E:$1013F;PG:'Aegean Numbers'),
das wird du NIE als ergebnis bekommen, wegen : Word(WS[j]) usw.
ganz "astrein" ist das verlinkte aber nicht (wie alles was mit lazaruns und uni... ach lassen wir das thema..)
(S:$10100;E:$1013F;PG:'Aegean Numbers'),
das wird du NIE als ergebnis bekommen, wegen : Word(WS[j]) usw.
Re: Unicode, Zeichenkodierung ermitteln
Ja, aber das wird auch höchst selten in einem Mail Subject vorkommen.lrlr hat geschrieben:@theo
ganz "astrein" ist das verlinkte aber nicht (wie alles was mit lazaruns und uni... ach lassen wir das thema..)
(S:$10100;E:$1013F;PG:'Aegean Numbers'),
das wird du NIE als ergebnis bekommen, wegen : Word(WS[j]) usw.

Der Code ist schön älter.
Wenn du's besser haben willst, dann nimm meinen utf8scanner: http://wiki.lazarus.freepascal.org/Theodp" onclick="window.open(this.href);return false;
Der gibt wahlweise UCS4Char zurück, bzw. Next arbeitet auch mit UCS4Char.
Code: Alles auswählen
s := TUTF8Scanner.Create(Memo1.text);
repeat
Tuwas(s.Next);
until s.Done;
s.Free;