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

2015-07-10 20:30:25 +08:00
 andybest
比如这个:
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)
3164 次点击
所在节点    问与答
5 条回复
Septembers
2015-07-10 20:32:08 +08:00
andybest
2015-07-10 20:39:52 +08:00
@Septembers 谢谢,我知道这个方法,但这个方法是 Encode URL 参数的,所以将整个 URL 放进去并不能获得主题所描述的结果(仅 Encode 中文部分)
Septembers
2015-07-10 20:53:50 +08:00
@andybest 可以考虑自己实现个URL encoder限定字符范围
(但是根据规范,原则上要对保留字符以外的字符进行编码
see https://zh.wikipedia.org/wiki/百分号编码
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;
}
}
lululau
2015-07-10 22:44:24 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/204841

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX