使用 UTF-8 URL 调用 nominatim.openstreetmap OSM

Using UTF-8 URLs to call nominatim.openstreetmap OSM

我想调用这个 URL http://nominatim.openstreetmap.org/search?q= ΠΑΡΙΣΙ&format=json&polygon=1&addressdetails=1

其中 0ΠΑΡΙΣΙ 是我从 JSP,

得到的参数

为了确保一切正确,我什至将 URL

写入文件
String urls = "http://nominatim.openstreetmap.org/search?q=" + URLEncoder.encode(addressString.trim(), "UTF-8") + "&format=json&polygon=1&addressdetails=1";
File fileDir = new File("c:\temp\testUTF-82.txt");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileDir), "UTF8"));
 out.append(urls);
out.flush();
out.close();

URL url = new URL(urls);

HttpURLConnection uc = (HttpURLConnection) url.openConnection();
uc.setRequestMethod("GET");
uc.setRequestProperty("Accept:", "application/json");           
uc.setRequestProperty("Accept-Charset:", "UTF-8");
uc.setRequestProperty("Accept-Charset", "UTF-8");           
uc.setRequestProperty("Content-Type:","application/x-www-form-urlencoded;charset=utf-8");
        uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

        uc.connect();

但是我得到了这个奇怪的错误:

Response: '406: Not Acceptable' for url: 'http://nominatim.openstreetmap.org/search?q= %CE%A0%CE%91%CE%A1%CE%99%CE%A3%CE%99&format=json&polygon=1&addressdetails=1'

也就是文件testUTF中的String-82.txt:

http://nominatim.openstreetmap.org/search?q=%CE%A0%CE%91%CE%A1%CE%99%CE%A3%CE%99&format=json&polygon=1&addressdetails=1

link 在浏览器中打开良好。它 returns 具有有效 OpenStreetMap 输出和 HTTP 200 状态代码的 JSON 响应。

您的客户端正在接收 HTTP 406 状态代码。 This page给出了状态码的解释。指示的错误原因是服务器上支持的响应格式与客户端上可接受的响应格式之间缺少匹配。

以下headers与可接受的响应格式有关:

  • 接受(MIME 类型)
  • Accept-Charset(字符集)
  • Accept-Encoding(文件格式/数据编码)
  • Accept-Language(自然语言)
  • Accept-Ranges:(来自资源的字节范围,即资源的一部分)

您可以尝试明确设置以下请求 headers:

"Accept: application/json" "Accept-Charset: UTF-8"