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

标签 java encoding openstreetmap nominatim

当我插入伊朗地址时,以下代码会生成一个带有问号作为显示名称的字符串(??????,?????????)。但是,如果我将相同的网址输入浏览器,它会返回伊朗德黑兰而不是问号。我知道它与编码有关,但是当浏览器在我的 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());

我尝试了以下代码,但它生成了以下内容:تهران,“ايران”,显示名称应为伊朗德黑兰。

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.

关于java - 如何在调用 Nominatim Webservice 的 Java 应用程序中处理外部地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452177/

相关文章:

java - 将代码写入 : start an R session, 运行 R 脚本,终止 session ,重复

java - SWT 开源应用程序库?

ruby-on-rails - 载波上传编码::UndefinedConversionError: "\xFF"从 ASCII-8BIT 到 UTF-8

encoding - Binary Lambda Calculus 如何编码括号?

r - 在 R 中使用 Open Street Map 和 get_osm {osmar}

gis - 如何从 OpenStreetMap 方式中去除水?

java - 如何在 IntelliJ IDEA 中从源代码查看表单

java - Spring框架中的应用程序上下文和bean工厂是什么

java - 无法编译包含非 ASCII 字符的 Java 文件

javascript - 我是否需要创建 native 应用程序才能离线使用传单 map