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的,不知道新版本改了什么。

  • 相关阅读:
    poj 1321 棋盘问题 (dfs)
    poj 3274 Gold Balanced Lineup(哈希 )
    poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)
    zoj 3351 Bloodsucker(概率 dp)
    poj 1840 Eqs (hash)
    poj 2418 Hardwood Species (map)
    poj 2151 Check the difficulty of problems(概率dp)
    poj 2442 Sequence(优先队列)
    poj 1442 Black Box(堆 优先队列)
    两个STL网址 总结的很好 && c++堆的网址
  • 原文地址:https://www.cnblogs.com/chihane/p/3619058.html
Copyright © 2011-2022 走看看