如何在调用 Nominatim Webservice 的 Java 应用程序中处理外部地址
How to handle foreign addresses in Java application that calls Nominatim Webservice
当我插入伊朗地址(?????, ????????) 时,以下代码生成一个带有问号的字符串作为显示名称。但是,如果我将相同的 url 放入我的浏览器,它会 returns Tehran, Iran 而不是问号。我知道它与编码有关,但如何在我的 java 应用程序中将英文文本作为浏览器 returns 获取?
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());
我尝试了以下代码,但它产生了这个:تهران,â€?ايران‎ 显示名称应该是德黑兰,伊朗。
System.out.println(new String(dealData.get(0).toString().getBytes("UTF-8")));
在 Nominatim 的 URL 参数中使用 "accept-language" 来指定 Nominatim 结果的首选语言,覆盖 HTTP header 可能设置的任何默认值。来自文档:
accept-language= <browser language string>
Preferred language order for showing search results, overrides the
value specified in the "Accept-Language" HTTP header. Either uses
standard rfc2616 accept-language string or a simple comma separated
list of language codes.
当我插入伊朗地址(?????, ????????) 时,以下代码生成一个带有问号的字符串作为显示名称。但是,如果我将相同的 url 放入我的浏览器,它会 returns Tehran, Iran 而不是问号。我知道它与编码有关,但如何在我的 java 应用程序中将英文文本作为浏览器 returns 获取?
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());
我尝试了以下代码,但它产生了这个:تهران,â€?ايران‎ 显示名称应该是德黑兰,伊朗。
System.out.println(new String(dealData.get(0).toString().getBytes("UTF-8")));
在 Nominatim 的 URL 参数中使用 "accept-language" 来指定 Nominatim 结果的首选语言,覆盖 HTTP header 可能设置的任何默认值。来自文档:
accept-language= <browser language string>
Preferred language order for showing search results, overrides the value specified in the "Accept-Language" HTTP header. Either uses standard rfc2616 accept-language string or a simple comma separated list of language codes.