url中的中文转码问题

f0xf0x 2014-05-14 02:18:06
下面的url是哪种编码方式?

百度搜索的url: http://m5.baidu.com/from=1089a/s?word=%259d%2571%2566%259e%2554%2576%25a0%2560%2574%259e%2543%2561&st=11104i&ts=4691535&sa=ih_2&ss=01&ix=404%25

搜索的中文是:中国移动

他用的是哪种中文编码?

我用URLDecoder.decode(url,decode),试过utf-8,gbk,gb1232各种编码都解析不出来。
请高手指教。
...全文
1033 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmppok 2014-05-15
  • 打赏
  • 举报
回复
引用 27 楼 haorengoodman 的回复:
[quote=引用 26 楼 rui888 的回复:] [quote=引用 24 楼 haorengoodman 的回复:]

public static void main(String[] args) throws Exception {
		String url_0 = "%259d%2571%2566%259e%2554%2576%25a0%2560%2574%259e%2543%2561";
		//1 去掉 25
		String url_1 = "%9d%71%66%9e%54%76%a0%60%74%9e%43%61";
		
		String[] url_2 = url_1.split("%");
		
		StringBuilder url_3 = new StringBuilder();
		for(int i=1;i<url_2.length;i++){
			String str = url_2[i];
			String res = Integer.valueOf(str,16).toString();
			int intRes = Integer.parseInt(res);
			intRes = intRes+256;
			intRes = intRes-201;
			String str_16 = Integer.toHexString(intRes+16);注意这里 比 网上的 多加 了一个 16
			url_3.append("%"+str_16);
		}
		System.out.println(url_3.toString());
		String strRes = URLDecoder.decode(url_3.toString(),"UTF-8");
		System.out.println(strRes);
	}
结果 : %e4%b8%ad%e5%9b%bd%e7%a7%bb%e5%8a%a8 中国移动 简单实现了一下,原理大概就是这样,按照帖子,+256 然后 -201 最后转 得出的结果刚好少了一个 16。加上之后能正确解析了。
确实是这样的,开始的时候我考虑到"%9d%71%66%9e%54%76%a0%60%74%9e%43%61"; 然后地下就是解析不出来。你怎么知道中间几次转换的。 [/quote] 我也是 网上查的 http://www.zhihu.com/topic/19599871/newest[/quote]
haorengoodman 2014-05-15
  • 打赏
  • 举报
回复
引用 26 楼 rui888 的回复:
[quote=引用 24 楼 haorengoodman 的回复:]

public static void main(String[] args) throws Exception {
		String url_0 = "%259d%2571%2566%259e%2554%2576%25a0%2560%2574%259e%2543%2561";
		//1 去掉 25
		String url_1 = "%9d%71%66%9e%54%76%a0%60%74%9e%43%61";
		
		String[] url_2 = url_1.split("%");
		
		StringBuilder url_3 = new StringBuilder();
		for(int i=1;i<url_2.length;i++){
			String str = url_2[i];
			String res = Integer.valueOf(str,16).toString();
			int intRes = Integer.parseInt(res);
			intRes = intRes+256;
			intRes = intRes-201;
			String str_16 = Integer.toHexString(intRes+16);注意这里 比 网上的 多加 了一个 16
			url_3.append("%"+str_16);
		}
		System.out.println(url_3.toString());
		String strRes = URLDecoder.decode(url_3.toString(),"UTF-8");
		System.out.println(strRes);
	}
结果 : %e4%b8%ad%e5%9b%bd%e7%a7%bb%e5%8a%a8 中国移动 简单实现了一下,原理大概就是这样,按照帖子,+256 然后 -201 最后转 得出的结果刚好少了一个 16。加上之后能正确解析了。
确实是这样的,开始的时候我考虑到"%9d%71%66%9e%54%76%a0%60%74%9e%43%61"; 然后地下就是解析不出来。你怎么知道中间几次转换的。 [/quote] 我也是 网上查的 http://www.zhihu.com/topic/19599871/newest
tony4geek 2014-05-15
  • 打赏
  • 举报
回复
引用 24 楼 haorengoodman 的回复:

public static void main(String[] args) throws Exception {
		String url_0 = "%259d%2571%2566%259e%2554%2576%25a0%2560%2574%259e%2543%2561";
		//1 去掉 25
		String url_1 = "%9d%71%66%9e%54%76%a0%60%74%9e%43%61";
		
		String[] url_2 = url_1.split("%");
		
		StringBuilder url_3 = new StringBuilder();
		for(int i=1;i<url_2.length;i++){
			String str = url_2[i];
			String res = Integer.valueOf(str,16).toString();
			int intRes = Integer.parseInt(res);
			intRes = intRes+256;
			intRes = intRes-201;
			String str_16 = Integer.toHexString(intRes+16);注意这里 比 网上的 多加 了一个 16
			url_3.append("%"+str_16);
		}
		System.out.println(url_3.toString());
		String strRes = URLDecoder.decode(url_3.toString(),"UTF-8");
		System.out.println(strRes);
	}
结果 : %e4%b8%ad%e5%9b%bd%e7%a7%bb%e5%8a%a8 中国移动 简单实现了一下,原理大概就是这样,按照帖子,+256 然后 -201 最后转 得出的结果刚好少了一个 16。加上之后能正确解析了。
确实是这样的,开始的时候我考虑到"%9d%71%66%9e%54%76%a0%60%74%9e%43%61"; 然后地下就是解析不出来。你怎么知道中间几次转换的。
码无边 2014-05-15
  • 打赏
  • 举报
回复
encodeURIComponent
haorengoodman 2014-05-15
  • 打赏
  • 举报
回复

public static void main(String[] args) throws Exception {
		String url_0 = "%259d%2571%2566%259e%2554%2576%25a0%2560%2574%259e%2543%2561";
		//1 去掉 25
		String url_1 = "%9d%71%66%9e%54%76%a0%60%74%9e%43%61";
		
		String[] url_2 = url_1.split("%");
		
		StringBuilder url_3 = new StringBuilder();
		for(int i=1;i<url_2.length;i++){
			String str = url_2[i];
			String res = Integer.valueOf(str,16).toString();
			int intRes = Integer.parseInt(res);
			intRes = intRes+256;
			intRes = intRes-201;
			String str_16 = Integer.toHexString(intRes+16);注意这里 比 网上的 多加 了一个 16
			url_3.append("%"+str_16);
		}
		System.out.println(url_3.toString());
		String strRes = URLDecoder.decode(url_3.toString(),"UTF-8");
		System.out.println(strRes);
	}
结果 : %e4%b8%ad%e5%9b%bd%e7%a7%bb%e5%8a%a8 中国移动 简单实现了一下,原理大概就是这样,按照帖子,+256 然后 -201 最后转 得出的结果刚好少了一个 16。加上之后能正确解析了。
legend_night 2014-05-15
  • 打赏
  • 举报
回复
编码后的十六进制数值减去71, 再次编码
teemai 2014-05-14
  • 打赏
  • 举报
回复
有点意思。多次编码导致的结果吧?
引用 22 楼 yonghang911 的回复:
[quote=引用 21 楼 haorengoodman 的回复:] http://www.zhihu.com/topic/19599871/newest
谢谢,知道方法了,原来是经过位移的。 我试试能不能解析出来,可以就结贴了。[/quote] 是移位的?解析出来分享下吧
f0xf0x 2014-05-14
  • 打赏
  • 举报
回复
引用 21 楼 haorengoodman 的回复:
http://www.zhihu.com/topic/19599871/newest
谢谢,知道方法了,原来是经过位移的。 我试试能不能解析出来,可以就结贴了。
haorengoodman 2014-05-14
  • 打赏
  • 举报
回复
http://www.zhihu.com/topic/19599871/newest
f0xf0x 2014-05-14
  • 打赏
  • 举报
回复
假设他是经过两次编码,而且加上自己的规则进去,那我是不是没办法反向解析出中文?
Mergades 2014-05-14
  • 打赏
  • 举报
回复
引用 18 楼 fuli_mouren 的回复:
String str = URLDecoder.decode("http://www.baidu.com/#wd=%E4%B8%AD%E5%9B%BD%E7%A7%BB%E5%8A%A8&rsv_spt=1&rsv_bp=1&ie=utf-8&tn=baiduhome_pg&f=8&bs=%E4%B8%AD%E9%80%9A&rsv_n=2&rsv_sug3=1&rsv_sug2=0&inputT=1019"); String str1 = new String(str.getBytes("gbk"), "utf-8"); System.out.println(str1);
--- 输出结果: http://www.baidu.com/#wd=中国移动&rsv_spt=1&rsv_bp=1&ie=utf-8&tn=baiduhome_pg&f=8&bs=中???&rsv_n=2&rsv_sug3=1&rsv_sug2=0&inputT=1019
Mergades 2014-05-14
  • 打赏
  • 举报
回复
String str = URLDecoder.decode("http://www.baidu.com/#wd=%E4%B8%AD%E5%9B%BD%E7%A7%BB%E5%8A%A8&rsv_spt=1&rsv_bp=1&ie=utf-8&tn=baiduhome_pg&f=8&bs=%E4%B8%AD%E9%80%9A&rsv_n=2&rsv_sug3=1&rsv_sug2=0&inputT=1019"); String str1 = new String(str.getBytes("gbk"), "utf-8"); System.out.println(str1);
f0xf0x 2014-05-14
  • 打赏
  • 举报
回复
对,是手机搜索出来的url
haorengoodman 2014-05-14
  • 打赏
  • 举报
回复
哦,明白了 m5这个域名 是给手机等移动终端用的
haorengoodman 2014-05-14
  • 打赏
  • 举报
回复
m5.baidu.com 地址 61.135.185.17 www.baidu.com 地址 61.135.169.105 当然百度的服务器有很多,你查看的地址有可能就和我的不一样了, 我想说 m5 这个域名,是百度用来测试用的?
f0xf0x 2014-05-14
  • 打赏
  • 举报
回复
这么说我是没办法解析出对应的中文。。。
tony4geek 2014-05-14
  • 打赏
  • 举报
回复
他这个 %259d%2571%2566%259e%2554%2576%25a0%2560%2574%259e%2543%2561 他服务器utf-8 gbk 估计传过去 解码之后自己再有一套自己规则解码才会 去检索
tony4geek 2014-05-14
  • 打赏
  • 举报
回复
这个不一定的,他后台得到数据可以在处理的。 不是本身的
zhjdg 2014-05-14
  • 打赏
  • 举报
回复
他后面还有这么多参数,自己编的也可以。
f0xf0x 2014-05-14
  • 打赏
  • 举报
回复
引用 9 楼 haorengoodman 的回复:
http://www.baidu.com/#wd=%E4%B8%AD%E5%9B%BD%E7%A7%BB%E5%8A%A8&rsv_spt=1&rsv_bp=1&ie=utf-8&tn=baiduhome_pg&f=8&bs=%E4%B8%AD%E9%80%9A&rsv_n=2&rsv_sug3=1&rsv_sug2=0&inputT=1019 经过url编码,也跟你说的不一样啊
你直接在浏览器打开http://m5.baidu.com/from=1089a/s?word=%259d%2571%2566%259e%2554%2576%25a0%2560%2574%259e%2543%2561&st=11104i&ts=4691535&sa=ih_2&ss=01&ix=404%25 会看到是搜索 中国移动的
加载更多回复(9)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧