encoding ie / mozilla
Gun
- browser
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
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
welche konrekten probleme hast du den bei der verarbeitung?
gruß,
wahsaga
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...