V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
andybest
V2EX  ›  问与答

Java 中如何仅将 URL 里的中文进行 URLEncode ?

  •  
  •   andybest · 2015-07-10 20:30:25 +08:00 · 3113 次点击
    这是一个创建于 3224 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如这个:
    http://httpbin.org/你好/test/123.html

    如果将这个 URL 贴入 Chrome 进行访问,然后再在 Chrome 地址栏复制并粘贴该 URL 则变为:
    http://httpbin.org/%E4%BD%A0%E5%A5%BD/test/123.html

    如何在 Java 中根据前一个 URL 获取后面一个 Encode 过的 URL?(即只针对 URL 里中文部分进行 URLEncode with UTF-8)
    5 条回复    2015-07-10 22:44:24 +08:00
    Septembers
        1
    Septembers  
       2015-07-10 20:32:08 +08:00 via Android
    andybest
        2
    andybest  
    OP
       2015-07-10 20:39:52 +08:00
    @Septembers 谢谢,我知道这个方法,但这个方法是 Encode URL 参数的,所以将整个 URL 放进去并不能获得主题所描述的结果(仅 Encode 中文部分)
    Septembers
        3
    Septembers  
       2015-07-10 20:53:50 +08:00 via Android
    @andybest 可以考虑自己实现个URL encoder限定字符范围
    (但是根据规范,原则上要对保留字符以外的字符进行编码
    see https://zh.wikipedia.org/wiki/百分号编码
    choury
        4
    choury  
       2015-07-10 22:40:58 +08:00
    这样应该就差不多了吧
    for (i=0; i<strSize; ++i) {
    ch = str[i];
    if (((ch>='A') && (ch<'Z')) ||
    ((ch>='a') && (ch<'z')) ||
    ((ch>='0') && (ch<'9'))) {
    result[j++] = ch;
    } else if (ch == ' ') {
    result[j++] = '+';
    } else if (ch == '.' || ch == '-' || ch == '_' || ch == '*') {
    result[j++] = ch;
    } else {
    sprintf(result+j, "%%%02X", (unsigned char)ch);
    j += 3;
    }
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3361 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:46 · PVG 22:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.