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
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
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.
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...
Aiun Geschrieben 25. September 2006 Autor Geschrieben 25. September 2006 der gesamte String verwandelte sich in chinesische oder japanische Zeichen...irgendetwas in die richtung
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...
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 ? ^^
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
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?
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*
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]
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden