Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries



Links

Issociate
Impressum

#1: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 08:36:35 by Mark Knochen

Hallo,

kann ich mit PHP die Zeichenkodierung eines Strings ermitteln?

Mein Problem ist, ich habe z.B. eine Text-Datei, die
statt einem Ü ein š enthält - eingelesen in einer externe
Anwendung wird aus dem š wieder ein Ü.

Jetzt generiere ich aber meinerseits auch eine Text-Date mit
den jeweiligen Umlauten, wie ü usw.
Der Text liegt als UTF-8 in der DB und ich lese ihn per
utf8_decode wieder aus.

Oder auch habe ich schon iconv in verschiedenen Kodierungen
ausprobiert, aber bisher ohne Erfolg.

Das Problem ist, ich kenne die Ziel-Kodierung nicht.

Danke


Mark



--
www.zeitfuerwahrheit.de

************************************************************ ************
*
Beim großen Manual, ich habe gesprochen! *
*
************************************************************ ************
*
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. *
Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion. *
Und ich habe C-Beams gesehen, glitzernd im Dunkel, *
nahe dem Thannhäuser-Tor. *
All diese Momente werden verloren sein... in der Zeit, *
so wie ... Tränen im Regen." *
*
************************************************************ ************

Report this message

Mr Ad

Google

#2: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 10:34:56 by Helmut Richter

On Sat, 11 Aug 2007, Mark Knochen wrote:

> Mein Problem ist, ich habe z.B. eine Text-Datei, die
> statt einem Ü ein ? enthält - eingelesen in einer externe
> Anwendung wird aus dem ? wieder ein Ü.

Dann wars auch kein ?, sondern irgendetwas anderes, das das Programm nicht
kannte, weswegen es aus Verzwiflung ein ?`ausgegeben hat.

Kannst du die Datei irgendwohin legen, wo man sie anschauen kann (z.B. als
..txt auf einen Webserver). Dann schauen wir rein und sagen dir, was
wirklich drinsteht.

Ich habe mir die Werkzeuge dazu allerdings selbst geschrieben, weil ich
nichts für mich Brauchbares gefunden habe.

--
Helmut Richter

Report this message

#3: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 10:55:46 by Norbert Melzer

Am Sat, 11 Aug 2007 10:34:56 +0200 schrieb Helmut Richter:

> On Sat, 11 Aug 2007, Mark Knochen wrote:
>
>> Mein Problem ist, ich habe z.B. eine Text-Datei, die
>> statt einem Ü ein ? enthält - eingelesen in einer externe
>> Anwendung wird aus dem ? wieder ein Ü.
>
> Dann wars auch kein ?, sondern irgendetwas anderes, das das Programm nicht
> kannte, weswegen es aus Verzwiflung ein ?`ausgegeben hat.

Das hat er auch gar nicht geschrieben, sondern da war Dein Reader
verzweifelt :-) Mein Reader zeigt mir an den stellen ein "s" mit nem
kopfstehenden "^" darüber an.

Da Du leider keinen User-Agent-Header mitübermittelst kann ich Dein OS
nicht erraten, aber meine Glaskugel sagt, daß Dein Linux oder MacOS
Probleme mit dem

Content-Type: text/plain; charset=windows-1252; format=flowed
^^^^^^^^^^^^^^^^^^^^

hat.

MfG
Norbert

Report this message

#4: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 11:03:53 by Ulf Kadner

Mark Knochen wrote:

> kann ich mit PHP die Zeichenkodierung eines Strings ermitteln?

Nein, nicht 100%ig. Aber Du kannst ermitteln in welcher Zeichenkodierung
der String nutzbar ist. Diese muß nicht unbedingt der entsprechen die im
original verwendet wurde.

mb_detect_encoding() ist dazu ganz nützlich. Ist aber nur nutzbar wenn
die Multibyte-Extension in PHP verfügbar ist.

MfG, Ulf

Report this message

#5: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 11:13:53 by Claus Reibenstein

Helmut Richter schrieb:

> On Sat, 11 Aug 2007, Mark Knochen wrote:
>
>> Mein Problem ist, ich habe z.B. eine Text-Datei, die
>> statt einem Ü ein ? enthält - eingelesen in einer externe
>> Anwendung wird aus dem ? wieder ein Ü.
>
> Dann wars auch kein ?

War's ja auch nicht. Es war ein š. Wenn bei Dir statt diesem š ein ?
angekommen ist, dann ist Dein Reader kaputt.

Gruß. Claus

Report this message

#6: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 11:34:52 by Ulf Kadner

Norbert Melzer wrote:

> Da Du leider keinen User-Agent-Header mitübermittelst kann ich Dein OS
> nicht erraten,

Der UA ist 'Pine'. Ich glaub den nutzt man nur auf linuxen.
Pine erkennt man oft an der Message-ID, beginnend mit Pine. Kann
allerdings auch ein Fake sein. Aber wozu dann?

MfG, Ulf

Report this message

#7: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 12:02:53 by Helmut Richter

On Sat, 11 Aug 2007, Ulf Kadner wrote:

> Der UA ist 'Pine'. Ich glaub den nutzt man nur auf linuxen.
> Pine erkennt man oft an der Message-ID, beginnend mit Pine. Kann allerdings
> auch ein Fake sein. Aber wozu dann?

Ist Pine, und der ist streng text-basiert, d.h. er gibt *nur*
Schriftzeichen in dem Code aus, der eh schon eingestellt ist und macht
keinerlei Versuche, andere Zeichen darzustellen. In diesem Fall hat er
korrekt angezeigt, dass das Posting in einem anderen Zeichensatz vorliegt
als meine sonstige Umgebung:

[ The following text is in the "windows-1252" character set. ]
[ Your display is set for the "ISO-8859-1" character set. ]
[ Some special characters may be displayed incorrectly. ]

*Wenn* ein Zeichen in den Zielcode übersetzbar ist, tut ers auch, d.h.
Umlaute und ähnliches werden korrekt dargestellt, auch wenn sie etwa in
UTF-8 vorliegen. Das s mit Hacek gibts aber im Zielcode ISO-8859-1
wirklich nicht. Den guten Pine trifft also keine Schuld, sondern
allenfalls mich, dass ich sowas Steinzeitliches benutze. Da gibts Gründe
dafür und dagegen, und zur Zeit überwiegen noch die dafür, aber das wäre
off-topic.

Also Tschuldigung: die Bemerkung mit dem ? hätte sich auf meinen Reader
beziehen sollen, wie Norbert Melzer treffend bemerkt hat.

Die Kernaussage bleibt: ohne die Datei zu sehen, kann man nur die
Glaskugel benutzen. *Wenn* dort ein s mit Hacek in windows-1252 steht
(also hex 9A), ist unerklärlich, wieso das manchmal ein Ü wird. Aber
vielleicht ist auch das ein Artefakt der Übertragung von einem Programm
zum anderen und steht nicht genau so in der fraglichen Datei.

--
Helmut Richter

Report this message

#8: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 14:05:37 by Ulf Kadner

Helmut Richter wrote:

> Ist Pine,

Sach ich doch... :-)

> Schriftzeichen in dem Code aus, der eh schon eingestellt ist und macht
> keinerlei Versuche, andere Zeichen darzustellen.

Selbst schuld. Es gibt genug bessere Alternativen. Ich hab gerad mal ne
FAQ zu Pine durchstöbert. Wenn Du Dein Unix/Linux auf UTF-8 in der Bash
einrichtest sollte das Problem bei Pine verschwinden (aktuelle Version
vorausgesetzt). Keine Ahnung obs das bringt, aber Versuchen macht schlauer.

> [ Some special characters may be displayed incorrectly. ]

:~]

> Die Kernaussage bleibt: ohne die Datei zu sehen, kann man nur die
> Glaskugel benutzen. *Wenn* dort ein s mit Hacek in windows-1252 steht
> (also hex 9A), ist unerklärlich, wieso das manchmal ein Ü wird. Aber
> vielleicht ist auch das ein Artefakt der Übertragung von einem Programm
> zum anderen und steht nicht genau so in der fraglichen Datei.

Aber das von dir vorgeschlagene Extra-Tool ist nicht nötig.
mb_detect_encoding() arbeitet recht zuverlässig.

Dennoch ein Frage zu Deinem Tool. In welcher Sprache haste das
geschrieben und auf welche Libraries greift das zurueck?

Ich hab hier unter Win32 das Problem, das die einzige mir bekannte
systemeigene Library die derartiges unterstützt in der MLang.dll
enthalten ist, welche erst ab IE5.5 mitgeliefert wird.

Da muste ich erst nen Wrapper ums COM-Interface bauen, was mir nicht
wirklich gefällt.

MfG, Ulf

Report this message

#9: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 14:54:14 by Mark Knochen

hallo,

habe eine Testdatei abgelegt unter:

http://www.kdndb.de/gaeb/test.txt

Das ist nur ein Teil einer GAEB-Datei D81

Beispiele für vollständige D81-Dateien hier:
http://www.sarnafil.de/de_downloadcenter/index/textvorlagen. htm

Da sind auch einige D81 Dateien mit kodierten Umlauten.

Ich bekomme meine Daten aus einer DB UTF-8 kodiert,
muss sie also in das Format umwandeln, damit sie dann
im GAEB-Viewe richtig angezeigt werden.

http://www.gaeb-viewer.de/index.php

Und ich habe noch keinen Hinweis darauf gefunden,
welche Kodierung dafür verwandt wird.

Danke

Mark

Report this message

#10: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 15:09:20 by Norbert Melzer

Am Sat, 11 Aug 2007 14:54:14 +0200 schrieb Mark Knochen:

> Und ich habe noch keinen Hinweis darauf gefunden,
> welche Kodierung dafür verwandt wird.

Frag doch einfach mal:

http://www.gaeb-viewer.de/index.php?modul=ModulWirUeberUns&a ction=HandleImpressum

HTH
Norbert

Report this message

#11: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 15:28:12 by Mark Knochen

Norbert Melzer wrote:
> Frag doch einfach mal:
>
> http://www.gaeb-viewer.de/index.php?modul=ModulWirUeberUns&a ction=HandleImpressum
>


Habe ich schon, allerdings noch keine Antwort ... ist ja auch eigentlich
Wochenende ...

Mark

Report this message

#12: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 18:54:01 by Alexander Schestag

Ulf Kadner wrote:
> Norbert Melzer wrote:
>=20
>> Da Du leider keinen User-Agent-Header mit=FCbermittelst kann ich Dein =
OS
>> nicht erraten,
>=20
> Der UA ist 'Pine'. Ich glaub den nutzt man nur auf linuxen.

N=F6. Es gibt auch eine recht gute Windowsversion. Hab ich mal im Einsatz=
=20
gehabt, bevor ich Windows von meinen Kisten verbannt hatte. Das nur am=20
Rande. ;-)

Grüße,

Alex

Report this message

#13: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 21:36:36 by Helmut Richter

On Sat, 11 Aug 2007, Ulf Kadner wrote:

> Sach ich doch... :-)
>
> > Schriftzeichen in dem Code aus, der eh schon eingestellt ist und macht
> > keinerlei Versuche, andere Zeichen darzustellen.
>
> Selbst schuld. Es gibt genug bessere Alternativen. Ich hab gerad mal ne FAQ zu
> Pine durchstöbert. Wenn Du Dein Unix/Linux auf UTF-8 in der Bash einrichtest
> sollte das Problem bei Pine verschwinden (aktuelle Version vorausgesetzt).
> Keine Ahnung obs das bringt, aber Versuchen macht schlauer.

Könnte gut sein. Ich müsste aber zuerst nachdenken, wo sich das alles
auswirken wird, z.B. beim Cut-and-Paste in ein Fenster, das zu einem
anderen Rechner gehört, der anders konfiguriert ist, oder beim Suchen mit
grep in Dateien, die noch ISO-8859-1-Zeichen enthalten oder ...

Mir wars noch nicht wichtig genug.

> Aber das von dir vorgeschlagene Extra-Tool ist nicht nötig.
> mb_detect_encoding() arbeitet recht zuverlässig.
>
> Dennoch ein Frage zu Deinem Tool. In welcher Sprache haste das geschrieben und
> auf welche Libraries greift das zurueck?

So toll ist das nicht, und nicht unbedingt verbreitungswürdig. Wenn ich
ein Problem habe, bastel ich halt was. Beispielsweise einen ordentlichen
Dump, damit man wenigstens sieht, was in einer Datei steht und das nicht
aus dem Output raten muss, den irgendwas draus macht. Beispiel:

000000 1 1 44696573 65204461 74656920 656e7468 e46c7420 7a776569 20766572 73636869
D i e s e D a t e i e n t h ä l t z w e i v e r s c h i
000020 1 33 6564656e 6520436f 64696572 756e6765 6e2066c3 bc722055 6d6c6175 74652e0a
e d e n e C o d i e r u n g e n f ü r U m l a u t e .\n

Da kann man ohne sowas lange suchen, bis man herausfindet, dass das ä in
ISO 8859-1 und das ü in UTF-8 codiert ist.

Als nächstes kommt eine Statistik rein, wieviele Zeichen nach welcher Norm
korrekt sind, mit Verweisen auf die Ausreißer.

Geschrieben in Perl. Alles von Hand -- ist nicht viel Programm.

--
Helmut Richter

Report this message

#14: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-11 23:59:33 by Ulf Kadner

Helmut Richter wrote:

> So toll ist das nicht, und nicht unbedingt verbreitungswürdig. Wenn ich
> ein Problem habe, bastel ich halt was. Beispielsweise einen ordentlichen
> Dump, damit man wenigstens sieht, was in einer Datei steht und das nicht
> aus dem Output raten muss, den irgendwas draus macht. Beispiel:
>
> 000000 1 1 44696573 65204461 74656920 656e7468 e46c7420 7a776569 20766572 73636869
> D i e s e D a t e i e n t h ä l t z w e i v e r s c h i
> 000020 1 33 6564656e 6520436f 64696572 756e6765 6e2066c3 bc722055 6d6c6175 74652e0a
> e d e n e C o d i e r u n g e n f ü r U m l a u t e .\n
>
> Da kann man ohne sowas lange suchen, bis man herausfindet, dass das ä in
> ISO 8859-1 und das ü in UTF-8 codiert ist.

Gezielte Suche oder Try&Error. Naja solange man bestimmte Grenzen bei
den Encodings ziehen kann mag das noch auf irgend ne Weise akzeptabel
sein. Das kann ich aber nicht. Es müßen auch z.B. unbedingt Mongolische,
Japanische, Arabische, Herbaische uvam. korrekt erkannt werden. Da ist
Try&Error oder gar gezielte Suche eher ausgeschloßen bzw. nur sinnvol
über ein Neutronales System umzusetzen. Das ist mir dann wieder zu happig.

MfG, Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_) Mitglied der Freizeitvögel? ;-)
^^

Report this message

#15: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-12 17:55:24 by Michel Fouquet

Hallo,

Ulf Kadner schrieb:
> Es müßen auch z.B. unbedingt Mongolische,=20
> Japanische, Arabische, Herbaische uvam. korrekt erkannt werden.

Herbaisch - die Sprache der Grasraucher? Da nicht genormt, in der Tat=20
sehr schwer korrekt zu erkennen.

SCNR,
Michel

Report this message

#16: Re: Zeichensatz / Kodierung ermitteln

Posted on 2007-08-12 21:02:01 by Helmut Richter

On Sat, 11 Aug 2007, Ulf Kadner wrote:

> Gezielte Suche oder Try&Error.

Ich will wissen, was in der Datei steht und nicht was ein Programm, das
ich nicht kenne, meint, dass drin steht. Nur dann kann ich einen möglichen
Fehler eingrenzen, ob er in den Daten liegt oder in der nachfolgenden
Verarbeitung der Daten.

> Es müßen auch z.B. unbedingt Mongolische, Japanische,
> Arabische, Herbaische uvam. korrekt erkannt werden.

Es werden alle Sequenzen von Bytes erkannt, die eine korrekte
UTF-8-Darstellung von einem Unicode-Zeichen sind (und vor allem auch die,
die es nicht sind und also Fehler sind). Ist das Ding mongolisch, dann
wird unter die Unicode-Sequenz (z.B. hex e1a0a9 für den mongolischen
Buchstaben Ang) nicht der Buchstabenname, sondern der Unicode-Hex-Wert
(also hier 1829 für Ang) druntergeschrieben. Wie das Zeichen heißt, ist
mir wurscht, wenn ich es eh nicht lesen kann, aber ob es ein korrekt
codiertes Zeichen ist, ist wichtig.

(Surrogate-Pairs werden nicht erkannt, aber ich habe auch noch nie gehört,
dass die einer wirklich verwendet hat.)

--
Helmut Richter

Report this message