java - borderfactory - jpanel




Java-Konvertiere String in ein gültiges URI-Objekt (8)

Am Ende habe ich den httpclient-4.3.6 benutzt:

import org.apache.http.client.utils.URIBuilder;
public static void main (String [] args) {
    URIBuilder uri = new URIBuilder();
    uri.setScheme("http")
    .setHost("www.example.com")
    .setPath("/somepage.php")
    .setParameter("username", "Hello Günter")
    .setParameter("p1", "parameter 1");
    System.out.println(uri.toString());
}

Ausgabe wird sein:

http://www.example.com/somepage.php?username=Hello+G%C3%BCnter&p1=paramter+1

Ich versuche, ein java.net.URI Objekt von einem String . Die Zeichenfolge enthält einige Zeichen, die durch ihre prozentualen Escape-Sequenzen ersetzt werden müssen. Aber wenn ich URLEncoder verwende, um die Zeichenfolge mit UTF-8-Codierung zu codieren, werden sogar die / mit ihren Escape-Sequenzen ersetzt.

Wie kann ich eine gültige codierte URL von einem String-Objekt erhalten?

http://www.google.com?q=a b gibt http% 3A% 2F% 2www.google.com ... an, während die Ausgabe http://www.google.com?q=a% lauten soll. 20b

Kann mir bitte jemand sagen, wie man das erreicht?

Ich versuche das in einer Android App zu tun. So habe ich Zugang zu einer begrenzten Anzahl von Bibliotheken.




Ich hatte ähnliche Probleme für eines meiner Projekte, um ein URI-Objekt aus einer Zeichenfolge zu erstellen. Ich konnte auch keine saubere Lösung finden. Folgendes habe ich mir ausgedacht:

public static URI encodeURL(String url) throws MalformedURLException, URISyntaxException  
{
    URI uriFormatted = null; 

    URL urlLink = new URL(url);
    uriFormatted = new URI("http", urlLink.getHost(), urlLink.getPath(), urlLink.getQuery(), urlLink.getRef());

    return uriFormatted;
}

Sie können stattdessen den folgenden URI-Konstruktor verwenden, um bei Bedarf einen Port anzugeben:

URI uri = new URI(scheme, userInfo, host, port, path, query, fragment);

Nun, ich habe es versucht

String converted = URLDecoder.decode("toconvert","UTF-8");

Ich hoffe, dass Sie das wirklich gesucht haben?


Oder vielleicht könnten Sie diese Klasse verwenden:

http://developer.android.com/reference/java/net/URLEncoder.html

Was ist in Android seit API Level 1 vorhanden.

Ärgerlich behandelt es jedoch Leerzeichen (ersetzt sie mit + anstelle von% 20). Um das zu umgehen, benutzen wir einfach dieses Fragment:

URLEncoder.encode(value, "UTF-8").replace("+", "%20");


Sie könnten versuchen: org.apache.commons.httpclient.util.URIUtil.encodeQuery im Apache commons-httpclient- Projekt

So (siehe URIUtil ):

URIUtil.encodeQuery("http://www.google.com?q=a b")

wird werden:

http://www.google.com?q=a%20b

Sie können es natürlich selbst tun, aber URI Parsing kann ziemlich unordentlich werden ...


Wenn Sie keine Bibliotheken mögen, wie wäre es damit?

Beachten Sie, dass Sie diese Funktion nicht für die gesamte URL verwenden sollten, sondern für die Komponenten ... zB nur die "ab" -Komponente, wenn Sie die URL erstellen - sonst weiß der Computer nicht, welche Zeichen angenommen werden eine besondere Bedeutung haben und welche eine wörtliche Bedeutung haben sollen.

/** Converts a string into something you can safely insert into a URL. */
public static String encodeURIcomponent(String s)
{
    StringBuilder o = new StringBuilder();
    for (char ch : s.toCharArray()) {
        if (isUnsafe(ch)) {
            o.append('%');
            o.append(toHex(ch / 16));
            o.append(toHex(ch % 16));
        }
        else o.append(ch);
    }
    return o.toString();
}

private static char toHex(int ch)
{
    return (char)(ch < 10 ? '0' + ch : 'A' + ch - 10);
}

private static boolean isUnsafe(char ch)
{
    if (ch > 128 || ch < 0)
        return true;
    return " %$&+,/:;[email protected]<>#%".indexOf(ch) >= 0;
}




utf-8