1

我想在我的 Android 应用程序中执行 HTTPRequest,使用以下代码:

BufferedReader in = null;
    try {
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet();
        request.setURI(new URI("http://www.example.de/example.php"));
        HttpResponse response = client.execute(request);
        in = new BufferedReader
        (new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String line = "";
        String NL = System.getProperty("line.separator");
        while ((line = in.readLine()) != null) {
            sb.append(line + NL);
        }
        in.close();
        String page = sb.toString();

        System.out.println(page);
        return page;
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                    e.printStackTrace();
            }
        }
   }

我正在调用的网页是一个返回字符串的 php 脚本。我的问题是特殊字符(ä、ü、ö、€ 等)显示为带框的问号。我怎样才能得到这些字符?

我认为这是编码的问题(德语应用程序-> UTF-8?)。

4

2 回答 2

0

可能您可以在显示到控制台时尝试设置编码。某些字符从服务器正确返回,但无法在控制台中显示。

String page = sb.toString();
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(page);
于 2013-08-06T15:57:04.790 回答
0

我玩过你的代码,反对http://www.google.de.

我能够“破解”某些东西,但不确定它是否是最优雅的解决方案。

行后:

HttpResponse response = client.execute(request);

... 我已经添加:

HttpEntity e = response.getEntity();
Header ct = e.getContentType();
HeaderElement[] he = ct.getElements();
if (
    he.length > 0 
        && he[0].getParameters().length > 0
        && he[0].getParameter(0) != null 
        && he[0].getParameter(0).getName().equals("charset")
    ) {
    String charset = he[0].getParameter(0).getValue();
    // with google.de, will print ISO latin ("ISO-8859-1")
    Log.d("com.example.test", charset);
}

...然后您可以添加字符集表示形式或其 Java 等效项作为InputStreamReader构造函数调用的第二个参数:

in = new BufferedReader(
    new InputStreamReader(
        response.getEntity().getContent(), 
        charset != null ? charset : "UTF-8"
);

让我知道这是否适合你。

另请注意,为了检查 Java 字符集等价性,您可以使用Charset.forName(String charsetName)并捕获相关Exception的 s (然后在您的语句中恢复Charset.defaultCharset()UTF-8等)。catch

于 2013-08-06T16:06:15.823 回答