URLEncoder - PC <> Android

  • Hallo,
    Ich arbeite an einem Programm für Java (PC) und Android.
    Ich nutze die Klasse URLEncoder nachdem ich einen String mit Base64 encodiert habe so:

    PC:

    Code
    public static String encBase64Url(String s) {
    		try {
    	            return  URLEncoder.encode(Base64.getEncoder().encodeToString(s.getBytes("UTF-8")), "UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			System.err.println("Error: " + e.getMessage());	
    			return null;
    		}
    	}


    Android:

    Code
    public static String encBase64Url(String s) {
    		try {
                        return URLEncoder.encode(Base64.encodeToString(s.getBytes("UTF-8"), Base64.DEFAULT), "UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			return null;
    		}
    	}


    Das Problem ist nur, dass bei gleicher Eingabe nicht das selbe zurück gegeben wird.

    z.B.:

    Eingabe:
    "oinawdinaifiurb"

    Ausgaben:
    PC:
    "b2luYXdkaW5haWZpdXJi"
    Android:
    "b2luYXdkaW5haWZpdXJi%0A"

    Bei Android hängt da noch "%0A" mit drann, was am PC nicht der Fall ist. Wie kann man das beheben?

  • Ich habe eine Notlösung, bin aber nicht sicher, ob das immer funktioniert:

    Bei Android die Methode so abändern:

    Code
    public static String encBase64Url(String s) {
            try {
                return URLEncoder.encode(Base64.encodeToString(s.getBytes("UTF-8"), Base64.DEFAULT).replace("\n", ""), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                return null;
            }
        }
  • da hängt in der android variante noch eine art whitespace dran, der von windows ignoriert wird. Ich denke das replace sollte an der stelle seine aufgabe erfüllen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!