1

私はAndroid用のrssリーダーアプリを書いていますが、解析を開始する前にxmlのエンコードを知る必要があります(windows-1251またはutf-8)。これは、xml宣言ヘッダーで説明されてい<?xml version="1.0" encoding="UTF-8"?>ます。解析する前にこのヘッダーを取得するにはどうすればよいですか?私はsaxパーサーのandroid.sax実装を使用し、文字列パラメーターとしてエンコーディングをInputStreamReaderに渡します。関連する質問を見つけました: SAXパーサーはwindows-1255エンコーディングを認識しません-しかし、解決策はcp-1251をutf-8に変換することです。これは、煩雑でリソースを必要とします。ヘッダーからエンコード値を知るだけでよいので、もっと良い解決策があるはずだと思います<?xml version="1.0" encoding="UTF-8"?>。しかし、xmlからこのヘッダーを取得することはできません。パーサーは<rss>タグから始まります。どうすれば入手できますか?

4

2 に答える 2

0

Androidで公式にサポートされているxmlPullParserに切り替えることをお勧めします。そうすれば、エンコーディングサポートの問題はなくなるはずです。

これがAndroidのドキュメントです。

SAXパーサーはAndroidv3.0+ではうまく機能しないため、これを軽視しないでください。

于 2012-12-17T21:54:37.930 に答える
0

まあ、質問はかなり明白でした:) Squonkのコメントに基づいて、機能したコードは次のとおりです。

byte[] data = new byte[50];     
            try{
            bs.mark(60);
            bs.read(data, 0, data.length);
            String value = new String(data,"UTF-8");
            if(value.toLowerCase().contains("utf-8"))
                return "UTF-8";
            else if(value.contains("1251"))
                return "windows-1251";
            } catch (IOException e) {
                Log.d("debug", "Exception: " + e);
                return "XML not found";
            }

次に、bs(BufferedInputStream)をリセットして、必要な文字セットで操作します。

于 2012-12-17T23:54:42.457 に答える