【发布时间】:2013-10-17 04:09:07
【问题描述】:
为了从以前的字符串中创建一个好的字符串格式的 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();
}
例如我得到了:
title : "T çé ü" desc : "" ==>
http://..?title=T+%C3%A7%C3%A9+%C3%BC&descr=&lat=...&long=..
正确的 url 应该是(来自 iOS 方法)==> http://..?title=T%20%C3%A7%C3%A9%20%C3%BC&descr=%20&lat=...&long=...
title : "HB s6/&" desc : "" ==> http://..?title=HB+s6&descr=&lat=..long=..
正确的 url 应该是(来自 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");
【问题讨论】:
-
iOS 对空格字符使用 %20 转义,Android URLEncode 使用 + espcape。两者都是为空字符转义的有效 url。使用 encodedStr.replaceAll("+", "%20") 使它们相同。
-
谢谢,我解决了将所有“+”替换为“%20”
-
encodedStr.replaceAll("\\+", "%20") 更好。 “+”应该被转义。
标签: java android url encoding utf-8