ERLEncoder.encode 网络链接中包含中文的解决方案

    今天在使用URL访问开放API接口的时候,因为要查询的数据中包含中文就出现了问题。无法获取的URL如下:

    http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=XXXX
使用的代码如下:

    URL url = new URL(address);
    connection = (HttpURLConnection) url.openConnection();

用以上代码打开数据连接,但是始终获取不到数据。这是因为要访问的URL中包含中文“北京”,因而无法查询。

 

如何修改这个问题呢?

    实际上,将上面的链接复制到浏览器进行访问是没有问题的。这时,如果细心的话就会发现,粘贴
之后被访问的连接并非粘贴过去的那串文字,其中的“北京”两个字变成了
    http://api.map.baidu.com/telematics/v3/weather?location=%E5%8C%97%E4%BA%AC&output=json&ak=XXXX

就是将“北京”连个字做了变化。所以,要想使用中文的URL的话,也应该将其中的中文进行转码之后再访问。

 

那么如何转码呢?

这就用到了ERLEncoder.encode方法,其中第一个参数是中文字符串,第二个参数是编码方式,返回的结果是编码后的结果

    String city = mEditText.getText().toString();
    try {
        city = URLEncoder.encode(city, "utf-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

使用ERLEncoder.encode即可。这样中文就变成上面那串带有%的字符串了。
另外,据说在普通Java程序中调试的时候是没有问题的,但是在Android中就不行了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值