如何在调用Nominatim Webservice的Java应用程序中处理外部地址

时间:2015-10-31 13:32:08

标签: java encoding openstreetmap nominatim

以下代码生成一个字符串,当我插入伊朗地址(?????,???????)时,该字符串将问号作为显示名称。但是,如果我将相同的URL添加到我的浏览器中,它将返回伊朗伊朗,而不是问号。我知道它与编码有关,但是如何在我的java应用程序中返回浏览器时获取英文文本?

String rawAddress = "Tehran";
String address = URLEncoder.encode(rawAddress, "utf-8");
String geocodeURL = "http://nominatim.openstreetmap.org/search?format=json&limit=1&polygon=0&addressdetails=0&email=myemail@gmail.com&languagecodes=en&q=";

String formattedUrl = geocodeURL + address;
URL theGeocodeUrl = new URL(formattedUrl);
System.out.println("HERE " +theGeocodeUrl.toString());
InputStream is = theGeocodeUrl.openStream();

final ObjectMapper mapper = new ObjectMapper();

final List<Object> dealData = mapper.readValue(is, List.class);
System.out.println(dealData.get(0).toString());

我尝试了下面的代码,但它产生了这个:تهران,ØØÙÙØØانfor显示名称应该是伊朗德黑兰。

System.out.println(new String(dealData.get(0).toString().getBytes("UTF-8")));

1 个答案:

答案 0 :(得分:1)

在Nominatim的URL参数中使用“accept-language”来指定Nominatim结果的首选语言,覆盖HTTP标头可能设置的默认语言。来自文档:

  

accept-language =&lt;浏览器语言字符串&gt;

     

显示搜索结果的首选语言顺序会覆盖   “Accept-Language”HTTP标头中指定的值。要么使用   标准rfc2616接受语言字符串或简单的逗号分隔   语言代码列表。