0

当我插入伊朗地址时,以下代码会生成一个带有问号的字符串作为显示名称(?????,???????)。但是,如果我将相同的 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());

我尝试了以下代码,但它产生了这个:تهران, â€?ايران‎ 显示名称应该是伊朗德黑兰。

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

1 回答 1

1

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

接受语言= <浏览器语言字符串>

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

于 2015-11-08T04:24:42.547 回答