Aiun Geschrieben 21. September 2006 Teilen Geschrieben 21. September 2006 hi, gibt es eine Möglichkeit, Zeichensatz und/oder Zeichencodierung eines Strings zu ermitteln ? ich habe eine Datei, die ich je nachdem was ich mache lesen kann, und dann doch wieder nur zeichenwust herausbekomme...daher vermute ich es liegt an der Zeichencodierung....doch niemand kann sagen welche das ist. danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PhOen1X Geschrieben 22. September 2006 Teilen Geschrieben 22. September 2006 Kannst Du vielleicht noch eine Programmiersprache zum Thread geben. Allgemein kenne ich keine Möglichkeit um aus einer Variable den Zeichensatz zu ermitteln, jedoch lässt sich meist am Filesystem oder Betriebssystem abschätzen um welchen Zeichensatz es sich handeln könnte. Bei Windows wird dein Zeichensatz wohl ISO-8859-1, CP1250 oder CP1251 sein. Bei Linux gib auf der Konsole einfach folgendes ein: locale charmap Nun siehst Du welchen Zeichensatz Deine Konsole verwendet. Wird z.B. ein Perl Script auf der Konsole ausgeführt, schreibt es auch mit diesem Zeichensatz Dateien auf die Platte. !!! Achtung !!! Wenn Du eine Konsole under X11 oder eine IDE wie Eclipse einsetzt verwendet das Script den Zeichensatz, den die Konsole / IDE vorgiebt. Erstellst Du z.B. ein File mit der IDE und willst es mit der Konsole weiter bearbeiten gibt das öfters ekelhafte Fehler. Greez, PhOeniX Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 25. September 2006 Autor Teilen Geschrieben 25. September 2006 *sich schämend in die ecke stellt* PHP4 es geht um eine CSV Datei die mit Excel und bestimmten anderen Programmen lesbar ist, aber mit PHP ausgelesen, oder wieder anderen Editoren, kommt nur zeichenwust. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 25. September 2006 Teilen Geschrieben 25. September 2006 Werden nur Umlaute und Sonderzeichen als "Zeichenwust" dargestellt, oder der gesamte String? Falls nur Erstere, tippe ich auf das alte DOS-Format (OEM, CP850), das so konvertiert werden kann: $str = "das ist ein t„st"; echo $str."<hr>"; echo iconv("CP850","ISO_8859-15",$str); [/PHP] Alternativ kannst Du auch mit dem Kommandozeilen-Tool "iconv" Tests machen. Eine Liste der untestützten Character-Sets bekommst Du mit "iconv -l". Vorraussetzung für PHP ist: Es muss iconv() in der Standard-C Bibliothek vorhanden sein oder libiconv auf Ihrem System installiert sein. Die libiconv-Bibliothek ist verfügbar über http://www.gnu.org/software/libiconv/. Edit: Du könntest ja mal einen Beispiel-String posten... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 25. September 2006 Autor Teilen Geschrieben 25. September 2006 der gesamte String verwandelte sich in chinesische oder japanische Zeichen...irgendetwas in die richtung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 25. September 2006 Teilen Geschrieben 25. September 2006 Ein Beispiel-String wär trotzdem ganz hilfreich, dann könnt ich mal kurz meinen Editor befragen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 26. September 2006 Autor Teilen Geschrieben 26. September 2006 wenn ich ein Beispiel generieren könnte, wäre ich wohl nahe an der Lösung ^^ die orginal-Daten darf ich nicht zeigen kann ich vielleicht Zeichensätze als array irgendwo abfragen und sie dann einfach alle mal durchgehen ? ^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 26. September 2006 Teilen Geschrieben 26. September 2006 kann ich vielleicht Zeichensätze als array irgendwo abfragen und sie dann einfach alle mal durchgehen ? ^^ Klar, kannst Dir ja mit "iconv -l" ne Liste der unterstützen Zeichensätze ausgeben lassen, und daraus ein Array machen... Dann kannste ja für jeden Wert ($strVal) ein: $strRes = iconv($strVal,"ISO_8859-15",$strSrc); machen, und Dir mal zu jedem Charecter-Set eine Zeile konvertieren und anzeigen lassen... Vielleicht ist ja was lesbares dabei Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PhOen1X Geschrieben 26. September 2006 Teilen Geschrieben 26. September 2006 Von welchem Betriebssystem + Anwendung / Programmiersprache wurde das File denn erzeugt? Sieht sieht die Datei normal aus wenn Du Sie mit einem Editor z.B. vi oder notepad öffnest? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 26. September 2006 Autor Teilen Geschrieben 26. September 2006 Windows Editor und Excel z.B. können sie öffnen. Eine betrachtung des hex-Codes hat gezeigt, das es wohl ein 2byte Zeichensatz ist. könnte es sein das der PHP-Befehl iconv nichts mit den Strings anfangen kann, die iconf -l ausgibt ? ich bekomme bei keinem der dortigen zeichensätze irgend eine Rückgabe *script nochmal checkt* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 26. September 2006 Teilen Geschrieben 26. September 2006 Also bei mir funktioniert das hier: <?php $strTest = '„¢@䢣@…‰•@…‰•†Âƒˆ…™@£…¢£KKK'; $strBinIconv = '/usr/bin/iconv'; $resPipe = popen($strBinIconv.' -l','r'); if ($resPipe) { $strRes = ''; while ($resPipe && !feof($resPipe)) { $strRes .= fgets($resPipe); } pclose($resPipe); } $arrCharsets = explode("\n",$strRes); if (is_Array($arrCharsets)) { foreach ($arrCharsets as $strKey=>$strVal) { $strCurrCSet = str_replace('//','',trim($strVal)); //Try to find a readable string... $strTmpRes = @iconv($strCurrCSet,"ISO_8859-15",$strTest); if (preg_match('/[a-z0-9äöü]{5,}/is',$strTmpRes)) { //We possibly have some readable (min 5) characters here... echo 'Maybe readable using conversion from \''.$strCurrCSet.'\' to \'ISO_8859-15\':<br>'; echo $strTmpRes; echo '<hr>'; } } } ?> [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 27. September 2006 Autor Teilen Geschrieben 27. September 2006 dein beispiel hat wunderbar geholfen. die // am Ende des Zeichensatz-Namens waren das Problem. Problem gelöst. zeichensatz gefunden. Ich danke vielmals Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.