Unicode, Zeichenkodierung ermitteln

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Unicode, Zeichenkodierung ermitteln

Beitrag von _Bernd »

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.

mschnell
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

Beitrag von mschnell »

_Bernd hat geschrieben:Gibt es eine Funktion, mit deren Hilfe ich erkennen kann, daß das z. B. kyrillisch ist?
Ich bin kein Unixcode-Experte :) :) :)
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

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von _Bernd »

Danke für Deine Antwort.

Ich hatte schon fast befürchtet, daß die Sache komplizierter wird, als zunächst angenommen. :-(

Gruß, Bernd.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von theo »

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;
Zuletzt geändert von theo am Mi 24. Feb 2010, 14:08, insgesamt 1-mal geändert.

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von lrlr »

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 ß

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von theo »

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.

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von _Bernd »

theo hat geschrieben: Da kommt das raus:
Интернет промоушн Цены упали!

Also kyrillisch plus basic latin.
ja, aber wie hast Du das jetzt erkannt?

Ich habe mal den Hex-Dump des Strings angehängt. Könnte man das jetzt auch auf Anhieb aufgrund des Dumps sagen?

Gruß, Bernd.
Dateianhänge
Screenshot-t.txt - GHex.png

pluto
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

Beitrag von pluto »

Интернет промоушн Цены упали!

Also kyrillisch plus basic latin.
Das kannst du aus diesem String ableiten ? Nicht übel... ich sehe keinen Zusammenhang.....
MFG
Michael Springwald

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von lrlr »

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)

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von theo »

_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?
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;

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;

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von _Bernd »

@theo, ja der dekodierte String war gemeint.

Und vielen Dank an alle. Ich denke, ich komme jetzt weiter.

Gruß, Bernd.

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von lrlr »

@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.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Unicode, Zeichenkodierung ermitteln

Beitrag von theo »

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.
Ja, aber das wird auch höchst selten in einem Mail Subject vorkommen. ;-)
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;

Antworten