Aiun Geschrieben 21. September 2006 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
PhOen1X Geschrieben 22. September 2006 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
Aiun Geschrieben 25. September 2006 Autor 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
Monty82 Geschrieben 25. September 2006 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
Aiun Geschrieben 25. September 2006 Autor Geschrieben 25. September 2006 der gesamte String verwandelte sich in chinesische oder japanische Zeichen...irgendetwas in die richtung Zitieren
Monty82 Geschrieben 25. September 2006 Geschrieben 25. September 2006 Ein Beispiel-String wär trotzdem ganz hilfreich, dann könnt ich mal kurz meinen Editor befragen... Zitieren
Aiun Geschrieben 26. September 2006 Autor 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
Monty82 Geschrieben 26. September 2006 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
PhOen1X Geschrieben 26. September 2006 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
Aiun Geschrieben 26. September 2006 Autor 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
Monty82 Geschrieben 26. September 2006 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
Aiun Geschrieben 27. September 2006 Autor 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
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.