代码之家  ›  专栏  ›  技术社区  ›  mobibob

在java中格式化UTF-8字符串最有效的方法是什么?

  •  0
  • mobibob  · 技术社区  · 14 年前

    我正在做以下工作:

    String url = String.format(WEBSERVICE_WITH_CITYSTATE, cityName, stateName);
    String urlUtf8 = new String(url.getBytes(), "UTF8");
    Log.d(TAG, "URL: [" + urlUtf8 + "]");
    Reader reader = WebService.queryApi(url);
    

    Overland Park Overland%20Park .

    这是最好的方法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   SyntaxT3rr0r    14 年前

    假设你真的想把你的字符串编码成你想要的URL(即“Overland Park”也可以格式化成“Overland+Park”) URLEncoder.encode(url, "UTF-8") . 其他不安全字符将转换为您要求的%xx格式。

        2
  •  1
  •   Stephen C    14 年前

    URLEncoder.encode(...) 如@Recurse所述。但是,如果URL的一部分或全部已经编码,那么这可能导致双重编码。例如:

    http://foo.com/pages/Hello%20There
    

    http://foo.com/query?keyword=what%3f
    

    另一个问题是 URLEncoder.encode(…) 它不理解某些字符应该在某些上下文中转义而不是在其他上下文中转义。例如,查询参数中的“?”应该转义,但是标记“查询部分”开头的“?”不应该转义。

    String safeURI = new URI(url).toASCIIString();
    

    但是,我还没有测试过这个。。。