0

日本語用のウィキメディアAPIサンドボックスを使用しています。

日本語版

英語版

ウィキメディアにHTTPリクエストを送信すると、XMLで形成された結果が得られます。API Sandbox Webページでリクエストを送信して結果を取得しようとすると、結果に文字の破損はありません。

しかし、Javaで結果を取得すると、結果に文字の破損が含まれます。

XMLファイルで特定の文字コードを割り当てることができません。

結果に特定の文字コードを割り当てるにはどうすればよいですか?どうすれば問題を解決できますか?

  try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db
                .parse(new URL(
                        "http://ja.wikipedia.org/w/api.php?action=query&prop=categories&format=xml&cllimit=10&titles="
                                + key).openStream());
        Element root = doc.getDocumentElement();
        NodeList queryList = root.getChildNodes();
        Node query = queryList.item(0);
        if (query instanceof Element) {
            Element queryEle = (Element) query;
            NodeList pagesList = queryEle.getChildNodes();
            Node pgs = pagesList.item(0);
            if (pgs instanceof Element) {
                Element pagesElement = (Element) pgs;
                NodeList pageList = pagesElement.getChildNodes();
                Node page = pageList.item(0);
                if (page instanceof Element) {
                    Element pageElement = (Element) page;
                    String title = pageElement.getAttribute("title");
                    title = new String(title.getBytes("UTF-8"), "UTF-8");
                }
            }
        }
    } catch (ParserConfigurationException e) {
    } catch (SAXException e) {
    } catch (IOException e) {
    }

リクエストを送信すると、ページタイトルが「大学」の結果が得られました。しかし、Javaでは「??」と表示されます。

上記のコードをAndroidアプリケーションに使用します。

4

1 に答える 1

0

title = new String(title.getBytes("UTF-8"), "UTF-8");除外することができます。

key=1 (UTF-8 を受信) の場合、私にとってはうまくいきました。ただし、UTF-8 Linux PC を使用しています。UTF-8 コンテキストなどで出力していない可能性があります。ドキュメントをファイルに書き込んでみてください。

さらに検査を行うことができます:

URLConnection connection = new URL("...").openConnection();
... connection.getContentEncoding();
... connection.getContentType();
InputStream in = connection.openStream();
于 2013-01-06T11:26:36.950 に答える