【问题标题】:Displaying NON-ASCII Characters using HttpClient使用 HttpClient 显示非 ASCII 字符
【发布时间】:2010-12-23 20:53:23
【问题描述】:

所以,我正在使用此代码来获取网站的整个 HTML。但我似乎没有得到非ASCII字符。我得到的只是带问号的钻石。
像这样的字符:å,看起来像这样:�
我怀疑它是因为字符集,那它会是什么?

Log.e("HTML", "henter htmlen..");
            String url = "http://beep.tv2.dk";
            HttpClient client = new DefaultHttpClient();
            client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, 
                    HttpVersion.HTTP_1_1);
            client.getParams().setParameter(CoreProtocolPNames.HTTP_ELEMENT_CHARSET, "UTF-8");
            HttpGet request = new HttpGet(url);
            HttpResponse response = client.execute(request);
            Header h = HeaderValueFormatter
            response.addHeader(header)
            String html = "";
            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null)
            {
                str.append(line);
            }
            in.close();
        //b = false;
        html = str.toString();

【问题讨论】:

    标签: java android html httpclient


    【解决方案1】:

    谢谢。这有效(以防其他人有问题):

    HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, 
             HttpVersion.HTTP_1_1);
        client.getParams().setParameter(CoreProtocolPNames.HTTP_ELEMENT_CHARSET, "iso-8859-1");
        HttpGet request = new HttpGet(url);
        request.setHeader("Accept-Charset", "iso-8859-1, unicode-1-1;q=0.8");
        HttpResponse response = client.execute(request);
        String html = "";
        InputStream in = response.getEntity().getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in,"iso-8859-1"));
    

    【讨论】:

    • 您需要回到您打开问题所在的同一台 PC/网络浏览器,然后通过 OpenID 注册您的原始用户帐户。这样您就可以在所有其他 PC/网络浏览器上使用相同的帐户。
    【解决方案2】:
    1. 使用new InputStreamReader(in, "UTF-8") 构造函数
    2. Accept-Charset 请求标头设置为Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
    3. 确保页面在浏览器中正确打开。如果不是,则可能是服务器端问题。
    4. 如果上述方法都不起作用,请使用 firebug(或类似工具)检查其他标头

    【讨论】:

      【解决方案3】:

      这确实帮助我入门,但我在阅读文本文件时遇到了同样的问题。它已使用以下命令修复:

          BufferedReader br = new BufferedReader(new InputStreamReader(new 
                      FileInputStream(fileName), "iso-8859-1"));
      

      ...当然,HTTP 响应也需要设置编码:

          response.setCharacterEncoding("UTF-8");
      

      感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-21
        • 2012-10-26
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多