V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
andybest
V2EX  ›  问与答

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

  •  
  •   andybest · Jul 10, 2015 · 3549 views
    This topic created in 3955 days ago, the information mentioned may be changed or developed.
    比如这个:
    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 replies    2015-07-10 22:44:24 +08:00
    andybest
        2
    andybest  
    OP
       Jul 10, 2015
    @Septembers 谢谢,我知道这个方法,但这个方法是 Encode URL 参数的,所以将整个 URL 放进去并不能获得主题所描述的结果(仅 Encode 中文部分)
    Septembers
        3
    Septembers  
       Jul 10, 2015 via Android
    @andybest 可以考虑自己实现个URL encoder限定字符范围
    (但是根据规范,原则上要对保留字符以外的字符进行编码
    see https://zh.wikipedia.org/wiki/百分号编码
    choury
        4
    choury  
       Jul 10, 2015
    这样应该就差不多了吧
    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;
    }
    }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5087 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 03:55 · PVG 11:55 · LAX 20:55 · JFK 23:55
    ♥ Do have faith in what you're doing.