Gun: encoding ie / mozilla

hallo,

vielleicht hat jemand einen tip zu folgendem problem: meine java webanwendung verhält sich bzgl. eines post-problems unterschiedlich je nach verwendetem browser.

durch debugging und beobachten des requests habe ich festgestellt, dass mozilla anders zu codieren scheint

feldinhalt: 24 177,97 (französisches betragsformat mit leerstelle statt tausender-punkt)

nach POST:

ie: fahrzeug.preis=24%A0177%2C97

firefox: fahrzeug.preis=24+177%2C97

any tips? habe den firefox schon mal auf die IE-standardeinstellung UTF-8 umgestellt, was aber (nach browser-neustart) keine änderung des verhaltens brachte.

gun

  1. hi,

    feldinhalt: 24 177,97 (französisches betragsformat mit leerstelle statt tausender-punkt)

    nach POST:

    ie: fahrzeug.preis=24%A0177%2C97

    %A0 wäre ein geschützte leerzeichen, %20 ein normales. wie genau wurde denn der feldinhalt eingegeben?

    firefox: fahrzeug.preis=24+177%2C97

    • ist eine andere methode, ein leerzeichen URL-konform zu kodieren.
      (m.W. "alte" schreibweise aus RFC1738.)

    welche konrekten probleme hast du den bei der verarbeitung?

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Das konkrete Problem ist: Der "input" läuft in beiden Fällen anscheinend korrekt in eine konvertierende Javaklasse/-Methode. "input" ist hier schlicht ein String-Parameter, der auch im Mozilla-Fall scheinbar korrekt ankommt (kompletter Betrag inklusive Leerzeichen). Anhand der locale "fr" wird ein DecimalFormat durchgeführt und das abschliessend Number n = f.parse... liefert halt bei Tests mit Mozilla Firefox mit obigem Beispiel "24" statt "24177.97". Via Internet Explorer klappt's wie gesagt, und der String-Parameter, der in der Konvertierungsmethode ankommt, scheint identisch.

      Sind nur ein paar Code-Zeilen:

      public Object parse(String input) // "input" in beiden Fällen "24 177,97"
          {
              if ( input == null || input.length() == 0 )
              {
                  return null;
              }
              Locale  locale = RequestProcessor.currentRequest().getLocale(); // in beiden Fällen "fr" mit leerem "country"
              DecimalFormatSymbols fs = new DecimalFormatSymbols(locale);
              DecimalFormat f = new DecimalFormat("#,##0.00", fs);
              ParsePosition pp = new ParsePosition(0);
              Number n = f.parse(input, pp);
              if ( n == null ) // ie = 24177.97, firefox = 24
              {
                  return error("errors.parse1");
              }
              BigDecimal bd = new BigDecimal(n.toString());
             return bd;
          }

      für mich absolut unverständlich, und im bugzilla bin ich noch nicht fündig geworden...