Announcement

Collapse
No announcement yet.

Tomcat zerschießt Soderzeichen??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tomcat zerschießt Soderzeichen??

    hallo zusammen,

    ich hab ein servlet das einen Request bekommt und daraufhin einen in UTF8 codierten String im Resoponse zurüchschickt. Wenn der Response dann in meinem PHP Script ankommt Sind alle großen "Ü", "Ö", "Ä" und "ß" zerschossen, die kleinen ü, ö und ä nicht. Wenn ich mein servlet unter Linux laufen lasse ist es umgekehrt, es sind dann nicht die großen sondern die kleinen ü ö und ä zerschossen. Weiß jemand woran das liegen kann? irgendeine Idee?

    mfg Willy

  • #2
    Nehme an, du nutzt das erforderliche URL-Encoding?
    Christian

    Comment


    • #3
      Weiß ned genau was du meinst. Mein code sieht vereinfacht dargestellt so aus:

      Code:
      protected void doGet(...) {
          PrintWriter out = response.getWriter();
          String s = irgendeineKlasse.methode(request); // das ist der in UTF8 codierte String
          out.print(s);
      }

      Comment


      • #4
        http://java.sun.com/javase/6/docs/ap...RLEncoder.html
        http://java.sun.com/javase/6/docs/ap...RLDecoder.html

        Wird wohl nicht reichen, wenn du in deiner URL Sonderzeichen übermittelst
        Allerdings sagt dein erster Beitrag etwas anderes, als dein zweiter zeigt...
        Lt. erstem schickst du ein Response an ein PHP-Script...
        Wenn du dein PHP mit www.meinphp.de/meinscript.php?paramter=value...
        aufrufst und du in paramter oder value Sonderzeichen hast, musst du die URL codieren / encodieren
        Christian

        Comment


        • #5
          nene, ich fürchte ich hab mich undeutich ausgedrückt. Bei dem servlet handelt es sich um eine volltextsuche. Sie wird von einem PHP Portal aus aufgrufen.

          PHP Code:
          PHP Code:
          $request = new HTTP_Request("http://irgendeineURL.de/search");
          $request->addRawQueryString("$wort=irgendwas");
          $request->sendRequest();
          $response=$request->getResonseBody(); 
          in der variable $response sind alls Großen Ü, Ö, und Ä zerschossen, die kleinen nicht. Aber in der Variable "r" von servlet stimmen sie noch.

          Comment


          • #6
            Also das PHP Script ruft das Servlet auf...
            Im Servlet wird gesucht...
            Im Servlet werden die Paramter vom PHP-Script entgegengenommen...
            Diese Parameter sind futsch...

            PHP encodiert automatisch - wenn ich mich recht erinnere-.....
            Also im Servlet decodieren...
            Zuletzt editiert von Christian Marquardt; 20.07.2008, 17:41.
            Christian

            Comment


            • #7
              das problem sind nicht die parameter, die kommen richtig an. Das problem ist die antwort die das php script vom servlet erhält (dabei handelt es sich um eine xml Datei), also das ergebnis der suche. in der XML Datei werden alle großen Ü Ö Ä und ß zerschossen, aber nicht die kleinen ü ö und ä.

              Comment


              • #8
                Siehe Beitrag 2 & 4

                Dur wirst die XML Datei codieren müssen
                Christian

                Comment


                • #9
                  jetzt hab ich im servlet folgende zeile geändert:

                  URLEncode.encode(s, "UTF-8");

                  und im php script hab ich "urldecode()" verwendet, aber mein problem wurde dadurch nicht gelöst. Es hat sich nichts verändert, nach wie vor sind nur die großen Ü Ö Ä und ß zerschossen.

                  Comment


                  • #10
                    schade,

                    du hast geprüft, dass der String vor dem Senden ok ist? bsp. Ausgae mittels System.out?

                    Das also eine Veränderung nicht durch das XML erzeugen stattfindet?
                    Christian

                    Comment


                    • #11
                      jo, hab ich, die XML Datei ist sicher ok.
                      Ich hab grad zwei testprogramme geschrieben, die weder mit tomcat noch servlets was zu tun haben. Hier der Code:

                      Code:
                      import java.io.BufferedReader;
                      import java.io.File;
                      import java.io.FileInputStream;
                      import java.io.FileNotFoundException;
                      import java.io.FileReader;
                      import java.io.FileWriter;
                      import java.io.IOException;
                      import java.io.InputStreamReader;
                      import java.net.URLEncoder;
                      
                      
                      public class test4 {
                      	public static void main(String[] args) {
                      	File f = new File("C:\\in.txt");
                      	File out = new File("C:\\out.txt");
                      	
                      	try {
                      		out.createNewFile();
                      		BufferedReader fr = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
                      		String s = fr.readLine();
                      		FileWriter fout = new FileWriter(out);
                      		
                      		fout.write(URLEncoder.encode(s, "UTF-8"));
                      		fout.flush();
                      		fout.close();
                      	} catch (FileNotFoundException e) {
                      		// TODO Auto-generated catch block
                      		e.printStackTrace();
                      	} catch (IOException e) {
                      		// TODO Auto-generated catch block
                      		e.printStackTrace();
                      	}
                      }
                      }

                      PHP Code:
                      <?php
                      $file 
                      file_get_contents("C:\\out.txt");
                      file_put_contents("C:\\out.txt"utf8_decode(urldecode($file)));
                      ?>

                      Ich führe erst das Java danach das PHP programm aus. In "in.txt" befinden sich alle Sonderzeichen die ich auf meiner Tastatur gefunden habe.
                      Fall 1:
                      Die Datei in.txt ist UTF8 codiert -> Die Datei "out.txt" ist auch UTF8 codiert und die meisten Sonderzeichen sind in Ordnung, nur nicht "Ö" "Ü" "Ä" und "ß" (die kleinen ü ö und ä stimmen).

                      Fall 2:
                      Die Datei in.txt ist ISO codiert -> Die Datei "out.txt" ist auch ISO codiert und alle Sonderzeichen sind in Ordnung, auch "Ö" "Ü" "Ä" und "ß".

                      Meiner Meinung nach ergibt das keinen Sinn. Ich verstehe es nicht - am wenigsten das "utf8_decode" im php script.

                      Kann mir das irgendjemand erklären? Oder vielleicht auf dem rechner ausprobieren?

                      mfg Willy

                      Comment


                      • #12
                        Ergebnis des JAVA Programmes ->out.txt

                        %C3%BC%C3%B6%C3%A4+%C3%9C%C3%96%C3%84+%C3%9F

                        so sollte es sein bei

                        üöä ÜÖÄ ß

                        als Input
                        Christian

                        Comment


                        • #13
                          Wenn "in.txt" iso oder UTF8 codiert ist?

                          Comment


                          • #14
                            iso sollte aber schnurzpiep sein, da die Ausgabe UTF ist

                            Habe jetzt auf den Nootebook kein PHP

                            Was ergibt

                            file_put_contents("C:\\out.txt", utf8_decode($file));


                            Christian

                            Comment


                            • #15
                              iso sollte aber schnurzpiep sein, da die Ausgabe UTF ist
                              ach ja?? warum das denn? Ich denke, dass die codierung, die ich an URLEncode übergebe, nicht das ausgabeformat angibt, sondern die codierung mit der die bytes interpretiert werden sollen. Bsp:

                              Nehmen wir an, in meinem String stünde folgendes byte "00000001" und UTF8 codiert entspräche das einem "Ü", aber iso codiert wäre "00000001" kein Ü sondern z.b. ein "<". Ich muss der methode encode mitteilen ob es sich um einen UTF8 oder ISO String handelt, weil sie sonst nicht wissen kann, ob es sich um ein "Ü" oder "<" handelt.

                              Was ergibt

                              file_put_contents("C:\\out.txt", utf8_decode($file));
                              Das ändert an der datei out.txt nichts, man könne das script dann auch gar nicht aufrufen

                              Comment

                              Working...
                              X