【问题标题】:URL parsing and website data encoding in JavaJava中的URL解析和网站数据编码
【发布时间】:2014-12-19 11:06:26
【问题描述】:

我正在制作一个程序,它给出了一个城市的名称,并显示它找到的结果。 然后你选择一个结果,它会为用户提供他们选择的城市的纬度和经度。

我遇到了编码问题。输出有时会显示“?????????”而不是城市。

网页显示的内容:

<searchresults timestamp="Thu, 23 Oct 14 17:12:39 +0000" attribution="Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright" querystring="moskva" polygon="false" exclude_place_ids="159021271,158732296,158806126,16815332,139019634,57818507,66411609,133125890,133109830,133105389,2629727735,5129421" more_url="http://nominatim.openstreetmap.org/search?format=xml&exclude_place_ids=159021271,158732296,158806126,16815332,139019634,57818507,66411609,133125890,133109830,133105389,2629727735,5129421&accept-language=en-US,en;q=0.5&q=moskva"><place place_id="159021271" osm_type="relation" osm_id="2555133" place_rank="16" boundingbox="55.4913076,55.9576988,37.290502,37.9674277" lat="55.7516335" lon="37.6187042" display_name="Moscow, Central Administrative Okrug, Moscow, Central Federal District, Russian Federation" class="place" type="city" importance="0.81231629038453" icon="http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png"/><place place_id="158732296" osm_type="relation" osm_id="102269" place_rank="8" boundingbox="55.1421745,56.0212238,36.8031012,37.9674277" lat="55.4792046" lon="37.3273304" display_name="Moscow, Central Federal District, Russian Federation" class="boundary" type="administrative" importance="0.81231629038453" icon="http://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png"/><place place_id="158806126" osm_type="relation" osm_id="389341" place_rank="16" boundingbox="55.0735908,55.8299355,35.2709194,38.849976" lat="55.7098009" lon="37.0536908" display_name="Москва, Moscow, Central Federal District, Russian Federation" class="waterway" type="river" importance="0.50926586919876"/><place place_id="16815332" osm_type="node" osm_id="1585841828" place_rank="19" boundingbox="41.9945,42.0345,60.037595,60.077595" lat="42.0145" lon="60.057595" display_name="Moskva, Amudaryo Tumani, Republic of Karakalpakstan, Uzbekistan" class="place" type="hamlet" importance="0.375" icon="http://nominatim.openstreetmap.org/images/mapicons/poi_place_village.p.20.png"/><place place_id="139019634" osm_type="way" osm_id="236406860" place_rank="17" boundingbox="48.0503237,48.0516342,24.2053204,24.2103535" lat="48.0511578" lon="24.2079606" display_name="Москва, Rakhiv, Рахівський район, Zakarpattia Oblast, 90600, Ukraine" class="waterway" type="river" importance="0.325"/><place place_id="57818507" osm_type="way" osm_id="23985851" place_rank="17" boundingbox="55.6094248,55.6177625,37.7975426,37.8262101" lat="55.6095218" lon="37.8089581" display_name="Москва, сельское поселение Развилковское, Ленинский район, Moscow Oblast, Central Federal District, Russian Federation" class="waterway" type="river" importance="0.325"/><place place_id="66411609" osm_type="way" osm_id="35916872" place_rank="17" boundingbox="55.4033937,55.4038942,38.5003179,38.5125733" lat="55.4033937" lon="38.5070172" display_name="Москва, сельское поселение Ашитковское, Voskresensky District, Moscow Oblast, Central Federal District, Russian Federation" class="waterway" type="river" importance="0.325"/><place place_id="133125890" osm_type="way" osm_id="221796745" place_rank="17" boundingbox="55.490488,55.4980542,35.3997149,35.4044686" lat="55.4932173" lon="35.4011963" display_name="Москва, сельское поселение Дровнинское, Можайский район, Moscow Oblast, Central Federal District, Russian Federation" class="waterway" type="stream" importance="0.325"/><place place_id="133109830" osm_type="way" osm_id="221796746" place_rank="17" boundingbox="55.4886176,55.4902089,35.4039231,35.4048013" lat="55.4894419" lon="35.4041347" display_name="Москва, сельское поселение Замошинское, Можайский район, Moscow Oblast, Central Federal District, Russian Federation" class="waterway" type="stream" importance="0.325"/><place place_id="5129421" osm_type="node" osm_id="581966682" place_rank="19" boundingbox="57.9469597,57.9869597,49.0880071,49.1280071" lat="57.9669597" lon="49.1080071" display_name="Москва, Верхошижемский район, Kirov Oblast, Volga Federal District, Russian Federation" class="place" type="village" importance="0.275" icon="http://nominatim.openstreetmap.org/images/mapicons/poi_place_village.p.20.png"/></searchresults>

你可以在这个链接看到它:Openstreetmap link

这是我的 Java 代码:

package twitter;

import java.net.URL; 
import java.net.URLEncoder;
import java.util.Scanner;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

public class twitter {

public static void main(String[] args)  {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        Scanner linnaNimi = new Scanner(System.in);
        System.out.println("Select country");
        String linn = linnaNimi.nextLine();

        Document MAP = db.parse(new URL("http://nominatim.openstreetmap.org/search.php?q"
                + "=" + URLEncoder.encode(linn, "UTF-8") + "&format=xml").openStream(), "UTF-8");

        NodeList placeList = MAP.getElementsByTagName("place");
        for (int linnaCount = 0; linnaCount<placeList.getLength(); linnaCount++) {
            String kohaNimed = placeList.item(linnaCount).getAttributes().getNamedItem("display_name").getNodeValue();
            System.out.println(linnaCount + " = " + kohaNimed);
        }
        System.out.println("\nSelect number in front of desired city.");
        int linnaNumber = linnaNimi.nextInt();

        String lat = placeList.item(linnaNumber).getAttributes().getNamedItem("lat").getNodeValue();
        String lon = placeList.item(linnaNumber).getAttributes().getNamedItem("lon").getNodeValue();
        System.out.println("Latitude = " + lat);
        System.out.println("Longtitude = " + lon);

        linnaNimi.close();

    } catch (IOException e) {
        System.out.println("1");
    } catch (SAXException e) {
        System.out.println("2");
    } catch (ParserConfigurationException e) {
        System.out.println("3");
    }
}
}

当我输入例如“moskva”时,我得到了这个输出

0 = ??????, ??????????? ???????????????? ?????, ??????, ???, ??????
1 = ??????, ???, ??????
2 = ??????, ???, ??????
3 = ??????, ?????, ?????????? ?????, ???????????? ???????, 90600, ???????
4 = ??????, ???????? ????????? ???????????, ????????????? ?????, ?????????? ???????, ???, ??????
5 = ??????, ???????? ????????? ?????????????, ????????? ?????, ?????????? ???????, ???, ??????
6 = ??????, ???????? ????????? ???????????, ????????? ?????, ?????????? ???????, ???, ??????
7 = ??????, ???????? ????????? ???????????, ????????? ?????, ?????????? ???????, ???, ??????
8 = ??????, ?????????????? ?????, ????????? ???????, ??????????? ??????????? ?????, ??????
9 = ??????, Amudaryo Tumani, Qaraqalpaqstan Respublikasi, Uzbekistan

如何将其更改为以 UTF-8 编码显示?

(当我输入数字时,它会给我正确的经度和纬度。)

如果我输入一个应该显示的城市,比如说美国城市或其他城市,它会正确显示它们。

【问题讨论】:

    标签: java xml parsing url utf-8


    【解决方案1】:

    好的,我想通了。

    在 Eclipse 中,默认编码是 ISO-8859-1 现在,如果我想将其更改为 UTF-8:

    单击以突出显示您的项目名称。从顶部开始:“运行 > 运行配置 > 通用” 将编码更改为其他 - UTF-8。

    这修复了 ??????? 的输出到俄语(或其他 ISO+8859-1 未知的)正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-26
      • 2015-10-23
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多