zoukankan      html  css  js  c++  java
  • 先说首先想到的,URL编码问题

    某一天我在测试代码的时候突然发现,程序下载下来的xml文件倒确实是xml文件,但是里面只有一个根节点。

    也就是说,联网正常,但是获取内容失败了。

    因为API一共就三个属性,最后一个是日子,肯定没错,于是问题只可能出现在城市和密码上。

    我首先怀疑密码失效了,因为我根本找不到这个API的申请入口,百度了一下有人说是内部API,所以密码是直接拿别人的来用的。

    之前用Python写字典的时候碰到过这样的事,总之就是被ban掉了,我怀疑这次也是,于是回原网页重新打开原博主给的链接,结果发现完全没问题,可以访问。

    然后我略一思考就发现了问题。

    原博主的地址是这个样子的:

    http://php.weather.sina.com.cn/xml.php?city=%D6%D8%C7%EC&password=DJOYnieT8234jlsK&day=0

    我想了想,把city属性改成了汉字重庆,结果果然不行。

    哦,编码问题。

    又他娘的是编码问题,可是这种编码叫什么我不知道啊。

    苦苦搜寻了半天找到了,叫URL编码。

    同时还找到了另一个人提供的解决办法。

    java.net.URLEncoder.encode(String s)
    java.net.URLDecoder.decode(String s)

    不过这两个方法已经弃用了,正确的用法是加上第二个字符串参数,自行制定编码类型。

    于是我就试了一下,用GB2312来给"南昌"字符编码,变成了%C4%CF%B2%FD,于是就成功了。

    URL编码的存在主要是考虑到有些人的设备只支持ASCII编码,所以就要想办法把其他字符用ASCII码来表示出来。

    不过我的火狐在前两天更新之前是可以直接用汉字来访问API的,不知道新版本改了什么。

  • 相关阅读:
    Zookeeper
    激活函数
    线程池
    用rand()和srand()产生伪随机数的方法总结 (转贴)
    连接SDE数据库代码
    ProgressBar
    ArcEngine+OpenGL之二系统平台搭建
    我所知道的ArcObjects开发(转)
    oracle wm_concat函数 乱码
    修改32位的AutoCAD2012,使其能在64位系统上安装
  • 原文地址:https://www.cnblogs.com/chihane/p/3619058.html
Copyright © 2011-2022 走看看