用于web url的UTF-8字符串编码

时间:2013-10-09 16:54:45

标签: java android url encoding utf-8

为了从之前的String中创建一个好的String格式化url,我想知道如何在另一个字符串中编码一个字符串,但是用UTF-8编码?

我的编码方法是:

public static String getUrlScheme(Context ctx, String title,
            String description, double latitude, double longitude) {

        try {

            String titleUtf8 = URLEncoder.encode(title, "utf-8");
            String descriptionUtf8 = URLEncoder.encode(description, "utf-8");

            String urlScheme = ctx.getResources().getString(
                    R.string.url_scheme_base)
                    + "?title="
                    + titleUtf8
                    + "&descr="
                    + descriptionUtf8
                    + "&lat=" + latitude + "&long=" + longitude;

            return urlScheme;

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

例如我得到了:

标题:“Tçéü”desc:“”==>

http://..?title=T+%C3%A7%C3%A9+%C3%BC&descr=&lat=...&long=..

正确的网址应该是(来自iOS方法)==> http://..?title=T%20%C3%A7%C3%A9%20%C3%BC&descr=%20&lat=...&long=...

标题:“HB s6 /&” desc:“”==> http://..?title=HB+s6&descr=&lat=..long=..

正确的网址应该是(来自iOS方法)==> http://..?title=HB%20s6&descr=%20&lat=...&long=...

问题是在iOS中,使用这种方法:stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding我的朋友可以用UTF-8编码好的字符串。

请帮忙

修改

通过“%20”替换“+”解决:

String titleUtf8 = URLEncoder.encode(title, "utf-8").replaceAll("\\+", "%20");
String descriptionUtf8 = URLEncoder.encode(description, "utf-8").replaceAll("\\+", "%20");

1 个答案:

答案 0 :(得分:-1)

在Android中,您还可以使用非常好的工具:URL encoding in Android

String query = URLEncoder.encode("apples oranges", "utf-8");
String url = "https://stackoverflow.com/search?q=" + query;