Ankündigung

Einklappen
Keine Ankündigung bisher.

Kodierung UTF-8 Russisch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kodierung UTF-8 Russisch

    Ich habe ein Problem , was bestimmt keinen wundert!!
    Mein programm liest die Verzeichnisstruktur aus mit allen Unteverzeichnissen und Dateien. Es funktioniert alles wie ich es so gerne haben möchte...
    Solange ich nur lateinische Schriften auslese, geplant war bei mir auch Dateien und Verzeichnisse auf Russisch auszulesen!!!
    PHP-Code:
            $handle = @opendir($dir);
                 while (
    $file = @readdir ($handle)) 
                 {
                     if(
    $file == "." OR $file == ".."){ continue; }
                     if(
    is_dir($dir.$file))
                    {   
                             
    usw... 
    und es geht schon beim Öffnen des Verzeinisses los, wird nich als Verzeichnis erkannt! Wenn ich das Verzeicniss in norm. lateinischen Buchstaben umbennene, wird das Verzeichnis geöffnet und die erste Datei sieht dann so aus 01 ??????.mp3.... Ich habe noch keine Mittel findent können mit denen es sich decodieren lässt!!!
    Ist es eigentlich möglich ?????? zu decodieren oder ist hier Zeichensatz schon endgültig verloren gegangen? Dann bedeutet es das ma mit php nicht Dateien auf anderen sprachen auslesen kann?
    Bis jetzt habe ich ausprobiert:

    PHP-Code:
    $file iconv("Windows-1251","UTF-8",$file);
     echo 
    html_entity_decode($file);
     
    $file unicod($file);
    echo 
    htmlspecialchars($file); 
    Was hat eigentlich Windows für Standartzeichensatz..
    Ich habe schon sehr viel Zeit damit verbracht und werde sehr dankbar wenn mir jemand weiterhelfen könnte!

  • #2
    Windows hat seinen eigenen Zeichensatz, kann aber auch teilweise auf ISO eigenstellt sein.
    Was ist denn "unicod()" für eine Funktion? Hast du die selber geschrieben?
    Probiers doch mal mit unicode_encode() und unicode_decode().
    Kenne mich mit diesen Zeichensätzen etc leider auch noch nicht so toll aus, vor allem weil es ja dann noch je nach Betriebssystem variiert

    Kommentar


    • #3
      Hi! Erste mal Danke für die Antwort!
      Die Funktion habe ich nich selber geschrieben die ist aus
      php.net.. ich habe jetzt von dir vorgeschlagene Funktionen ausprobiert
      unicode_encode() und unicode_decode() die werden nicht erkannt..
      Fehler:

      Fatal error: Call to undefined function unicode_encode() in C:\xampp\htdocs\Mymp3archiv\050308\rus_test.php on line 8

      Muss etwas #includeiren ? php.ini?
      Ich benutze zur Testzwecken Xampp Php Version 5.2.5
      Funktionieren die bei dir? Geht es vielleicht nur unter Linux obwohl apache ist apache... Ja das ist auch gute Frage wegen BS, es sollte eingetlich naher unter Linux laufen bei mir!

      Kommentar


      • #4
        Also eine Funktion "unicod()" gibt es bei mir nicht, wenn ich die Suche von php.net benutze. Kannst du mir vielleicht mal einen Link geben.
        Ich frage mich nur gerade, warum ich dir unicode-Funktionen angedreht habe, obwohl du ja UTF-8 willst ^^
        Vielleicht klappts damit: PHP: utf8_encode - Manual bzw. PHP: utf8_decode - Manual

        Also bei mir funktionieren alle diese 4 Funktionen problemlos und ich glaube nicht, dass ich was spezielles included habe. Benutze aber nicht XAMPP, habe alles von Hand installiert, damit ich weiss, wo der Fehler sitzt, wenns Probleme gibt

        Kommentar


        • #5
          Servus!!! Die Funktion unicod() ist keine Standartfunktion von php es war ein von vielen vorgeschlagen Lösungen die ich ausprobiert habe! Ich habe die noch irgendwo in Datei,nichts besonderes, aber wenn du willst ich kann es posten den Link habe ich nicht mehr.
          Es ist schon komisch das auch mein php-editor nicht unicode_decode,encode erkennt die anderen hat er gleich erkannt! Da stimmt etwas nicht!
          Ja ich komme da einfach nicht weiter!!! Ich denke das Probelm liegt in dem was ich codiere nicht mit welche Funktion ... wenn die Zeichen schon falsch eingelsen werden man kann die codieren mit was man will es bleiben ?????? !
          ich habe heite einfach den header auf verschiedene Zeichensätze umgestellt es blieb ohne Erfolg... Der Gedanke ist ich will zuerst prüfen was ich einlese

          header ('Content-Type: text/plain; charset=ISO 10646'); usw

          und dann kann man über codierunren sprechen...
          Die Funktion readdir list es ein:
          while ($file = @readdir ($handle))
          ob die es wirklich macht bezweifle ich
          das kriege ich raus aus einem Verzeichnis

          02 ????? ????????.mp3
          03 ??????.mp3
          04 ????? ?????.mp3
          05 ?????????.mp3
          06 ????? ??????? ?????.mp3
          07 ?????? ??????.mp3
          09 ??????? ?? ??????.mp3
          10 ?????????????????.mp3
          11 ?? ????.mp3
          12 ?? ???.mp3

          Kommentar


          • #6
            Vielleicht muss du mal Russisch als Sprache bei Windows installieren??!
            (kenne mich nicht aus)

            Kommentar


            • #7
              Vermutlich werden schon die Windows API Funktionen um Auslesen der Namen die Segel streichen, da mit einiger Sicherheit nicht die Unicode-Versionen gebunden werden.
              Was gibt folgendes Skript aus?
              PHP-Code:
              while ($file = @readdir ($handle)
              {
                for(
              $i=0$i<strlen($file); $i++
                {
                  
              printf('%s (%02x)  '$file[$i], ord($file[$i]));
                }
                echo 
              "<br />\n";

              Kommentar


              • #8
                @ David: da fehlt ne 2te schließende Klasmmer nach $handle

                @ topic: Da das 02 und das .mp3 richtig angezeigt wird, scheint es so, als würde es sich hier um UTF-8 (Unicode 8bit) handeln (siehe Wikipedia). Bis jetzt dachte ich eigentlich, dass Windoof UTF-16 in APIs und NTFS verwendet ...
                Du hast so ziemlich das größte Problem, das es bei PHP gibt: Charsets.
                PHP arbeitet nämlich eigentlich mit ISO-8858-1, das kann leider aber keine russischen Zeichen darstellen. Da die Strings von PHP binary-safe sein sollten, müssten die Funktionen für readdir, etc. aber trotzem für Unicode funktionieren.

                Damit russische Pfadangaben in der .php funktionieren, muss die Datei mit dem richtigen Encoding (scheinbar UTF- abgespeichert werden. Sonst werden die Pfade nicht erkannt (weils eben keine russischen Zeichen gibt). Damit der Browser keine ??? statt dem eigentlichen Text anzeigt, muss dem Browser per Header(...) klar gemacht werden, dass es sich um UTF-8 handelt. Daraus folgend müssen aber auch alle anderen String als UTF-8 kodiert sein, was eigentlich durch's abspeichern mit dem Encoding sichergestellt wird.

                Eine andere Variante ist mit UTF8_encode und _decode ständig herumzukonvertieren. Das ist aber nicht so das Wahre.
                Mein Windows-Support hat irgendwo seine Grenzen, seit dem ich Linux benutze - sry.

                Kommentar


                • #9
                  Zitat von Black Sliver Beitrag anzeigen
                  Da die Strings von PHP binary-safe sein sollten, müssten die Funktionen für readdir, etc. aber trotzem für Unicode funktionieren.
                  Dem ist gerade bei readdir et al nicht so, wenn php nicht die Unicode Versionen der Windows API benutzt.
                  Deshalb bitte einfach die Klammer anfügen, das Skript ausprobieren und die Ausgbae posten.

                  Kommentar

                  Lädt...
                  X