带有谷歌搜索结果问号的钻石

时间:2012-09-14 19:30:55

标签: android html character-encoding

我遇到了下一个编码问题:查询谷歌时 起初用户代理是硬编码的:如此

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0"

我在设备“A”上收到有效结果,但在设备“B”上接收方法: httpConnection.getResponseCode();
返回time out exception
然后我决定尝试一些伏都教,我将“用户代理”更改为:

String userAgent = System.getProperty("http.agent");

现在我在设备“B”(希伯来语和英语)上获得了可读的结果,但设备“A”在希伯来语中返回钻石内部的问号(编码问题)(英语工作正常)。

请告知(我需要做什么才能摆脱'em钻石):)
我已经添加了下面使用的代码
ELAD

public ArrayList<ItemSearch> getSuggestFromServer(String query,
        Context cntxt, int iCountResult)
{
    String savedQuery = String.copyValueOf(query.toCharArray());
    ArrayList<ItemSearch> mResultArrayList = new ArrayList<ItemSearch>();
    ArrayList<ItemSugges> mSuggesArrayList = new ArrayList<ItemSugges>();
    String mSuggestUri = null;
    String language = "";
    String country = "";
    if (mSuggestUri == null)
    {
        Locale l = Locale.getDefault();
        language = l.getLanguage();
        country = l.getCountry().toLowerCase();
        // Chinese and Portuguese have two langauge variants.
        if ("zh".equals(language))
        {
            if ("cn".equals(country))
            {
                language = "zh-CN";
            } else if ("tw".equals(country))
            {
                language = "zh-TW";
            }
        } else if ("pt".equals(language))
        {
            if ("br".equals(country))
            {
                language = "pt-BR";
            } else if ("pt".equals(country))
            {
                language = "pt-PT";
            }
        }
        mSuggestUri = cntxt.getResources().getString(
                "http://www.google.com/complete/search?hl=%1$s&amp;gl=%2$s&amp;", language, country)
                + "q=";
    }
    String resultString = new String("");
    try
    {
        query = URLEncoder.encode(query, "UTF-8");
        mSuggestUri += query + "&output=toolbar";

        URLConnection connection = null;
        // mSuggestUri
        URL url = new URL(mSuggestUri);
        connection = url.openConnection();
        HttpURLConnection httpConnection = (HttpURLConnection) connection;
        httpConnection.setRequestMethod("GET");

        String userAgent = System.getProperty("http.agent");
        httpConnection
                .setRequestProperty(
                        "User-Agent",
                        userAgent);

        httpConnection
                .setRequestProperty("Content-Type",
                        "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        httpConnection.setRequestProperty("Accept-Encoding", "deflate");

        httpConnection.setDoOutput(false);
        httpConnection.setDoInput(true);

        httpConnection.setConnectTimeout(2000);
        httpConnection.setReadTimeout(1000);


        // added
        httpConnection.setRequestProperty("http.keepAlive", "false");

        httpConnection.setRequestProperty("Connection", "close");
        // added

        httpConnection.connect();
        int responseCode = httpConnection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK)
        {
            try
            {
                XmlPullParserFactory factory = XmlPullParserFactory
                        .newInstance();
                factory.setValidating(false);
                XmlPullParser mxml = factory.newPullParser();
                mxml.setInput(httpConnection.getInputStream(), null);
                int eventType = mxml.getEventType();
                int i = 0;
                while ((eventType != XmlPullParser.END_DOCUMENT))
                {
                    switch (eventType)
                    {
                        case XmlPullParser.START_DOCUMENT:

                            break;
                        case XmlPullParser.START_TAG:
                            String nameTag = mxml.getName();
                            if (nameTag.contains("suggestion"))
                            {
                                ItemSugges isuggest = new ItemSugges();
                                isuggest.sugges = mxml.getAttributeValue(
                                        null, "data");
                                mSuggesArrayList.add(isuggest);
                            } else if (nameTag.contains("num_queries"))
                            {
                                mSuggesArrayList.get(i).weigth = Long
                                        .valueOf(mxml.getAttributeValue(
                                                null, "int"));
                                i++;
                            }
                            break;
                        case XmlPullParser.TEXT:
                            String name = mxml.getText();
                            break;
                        case XmlPullParser.END_TAG:

                            break;
                        default:
                            break;
                    }
                    try
                    {
                        eventType = mxml.next();
                    } catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }

                for (int indx = 0; mSuggesArrayList.size() > indx; indx++)
                {
                    ItemSearch is = new ItemSearch();
                    is.nameItem = mSuggesArrayList.get(indx).sugges;
                    is.spannerString = Mngr.getInstance().getSpannedString(
                            is.nameItem, savedQuery);
                    is.typeItem = typeItemSearch.web;
                    is.metaInfo = mSuggestUri = cntxt.getResources()
                            .getString(R.string.google_search_extended,
                                    language, country)
                            + "q=" + is.nameItem;

                    mResultArrayList.add(is);
                }
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        } else
        {
            resultString = "Server does not respond";
        }
    } catch (MalformedURLException e)
    {
        resultString = "MalformedURLException:" + e.getMessage();
    } catch (IOException e)
    {
        Log.i("elad", "bummer", e);
        resultString = "IOException:" + e;//.getMessage();
    }
    return mResultArrayList;
}

0 个答案:

没有答案