2016-11-03 27 views
1

XML解析中に文字を表示:一般的にhttp://www.cbr.ru/scripts/XML_daily.asp間違って私はウェブサイトを解析しようとしている

SAXParserFactory factory = SAXParserFactory.newInstance(); 
Parserhandler handler = new Parserhandler(); 
SAXParser parser = factory.newSAXParser(); 
InputSource is = new InputSource ( "http://www.cbr.ru/scripts/XML_daily.asp"); 
is.setEncoding ("iso-8859-1"); 
parser.parse (is, handler); 

、私は別の亜種エンコーディングUTF-8を試し、CP1251等

が、見返りに私が取得以下のような文字:

ðýíäîâ

Þæíîàôðèêàíñêèõは、または私はエラーを取得する

未知のエンコーディング

私を助けてください。

+0

は、新しい答えを追加しました。私はこのコードを実行して、動作することを確認しました。 –

答えて

0

おそらく、次のように正しい文字を取得できます。

public void theMethod() { 
    try { 
     String uri = "http://www.cbr.ru/scripts/XML_daily.asp"; 

     ByteArrayInputStream bis = getByteArrayInputStreamOfUri(uri); 
     parser.parse(bis, handler); 
    } catch (...) {} 
} 

public ByteArrayInputStream getByteArrayInputStreamOfUri(String uri) { 
    InputStream is = getInputStreamOfUrl(uri); 
    if (is == null) { 
     return null; 
    } 

    Scanner sc = new Scanner(is, "Windows-1451"); 
    StringBuilder sb = new StringBuilder(); 

    while (sc.hasNextLine()) { 
     sb.append(sc.nextLine()); 
    } 

    try { 
     return new ByteArrayInputStream(sb.toString().getBytes("utf-8")); 
    } catch (UnsupportedEncodingException e) { 
     return null; 
    } 
} 

private InputStream getInputStreamOfUrl(String uri) { 
    try { 
     URL url = new URL(uri); 

     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("GET"); 
     connection.setRequestProperty("Accept", "application/xml"); 
     return connection.getInputStream(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 
+0

ありがとう!申し訳ありません、私は初心者です。 connection.setRequestProperty( "Accept"、 "application/xml")とは何ですか? –

+0

http heaerに "Accept"をhttp要求に設定します。 heaerは、受け入れ可能なデータ型を指定します。 – nakano531

+0

と2番目のパラメータもこのように記述していますか? –

0
 URL url = new URL("http://www.cbr.ru/scripts/XML_daily.asp"); 
     URLConnection conn = url.openConnection(); 
     Reader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "windows-1251")); 

     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     Parserhandler handler = new Parserhandler(); 
     SAXParser parser = factory.newSAXParser(); 
     InputSource is = new InputSource(reader); 
     parser.parse (is, handler); 
+0

ProtocolException:あまりにも多くのリダイレクト –

+0

ああ申し訳ありませんが動作します。ちょうど窓の代わりにWindows-1251を書かなければならなかった-1251 –

+0

奇妙な...小文字のwは私のために働いた。とにかく、このトリックは、SAXパーサの外側にあるキリル文字セットをデコードすることでした。なぜなら、SAXパーサーは、あなたが望む文字セットを理解できなかったようです。答えを正しいものとして受け入れることができれば幸いです。乾杯。 –

関連する問題