1

重複の可能性:
UTF-8 でエンコードされた XML ファイルの解析

いくつかのアラビア文字を含む UTF-8 でエンコードされた XML ファイルを解析しています。アラビア文字が表示されないことを除いて、他のすべては正常に機能しています。いくつかの奇妙な文字が以下のように表示されます。

ÙØ±ÙÙ

解析中の XML " http://212.12.165.44:7201/UniNews121.xml " ファイルへのリンクは次のとおりです。

以下はコードです

        public String getXmlFromUrl(String url) {

        try {
            return new AsyncTask<String, Void, String>() {
                @Override
                protected String doInBackground(String... params) {
                    //String xml = null;
                    try {

                        DefaultHttpClient httpClient = new DefaultHttpClient();
                        httpClient.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET,"UTF-8");
                        HttpGet httpPost = new HttpGet(params[0]);
                        HttpResponse httpResponse = httpClient.execute(httpPost);
                        HttpEntity httpEntity = httpResponse.getEntity();
                        xml = new String(EntityUtils.toString(httpEntity).getBytes(),"UTF-8");

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                                    //just to remove the BOM Element    
                    xml=xml.substring(3);

            //Here am printing the xml and the arabic chars are malformed                                                       
                                    Log.i("DEMO", xml);
                    return xml;

                }
            }.execute(url).get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return xml;
    }

エラーは発生しておらず、アラビア文字の形式が正しくないだけで、すべてが正常に機能していることに注意してください。

助けていただければ幸いですが、具体的な回答をお願いします

4

1 に答える 1

1

これ

xml = new String(EntityUtils.toString(httpEntity).getBytes(),"UTF-8");

あなたが望むことをしません。EntityUtils.toString()デフォルトの文字セットを使用してから、エンコーディングが指定されていない場合にもプラットフォームエンコーディングを使用するgetBytes()を呼び出し、次にこのbyte[]をUTF-8文字列byte[]として読み取ろうとするnewStringを呼び出します。

あなたは単に電話する必要があります

xml = EntityUtils.toString(httpEntity, "UTF-8");
于 2012-09-18T13:16:15.903 に答える