android java URLDecoder问题

时间:2010-09-29 03:45:10

标签: android

我在WebView上显示的字符串为“Siwy& Para Wino”

我从网址获取它,我得到一个字符串“Siwy%2B%2526%2BPara%2BWino”。 //得到纠正

现在我正在尝试使用URLDecoder来解决这个问题:

String decoded_result = URLDecoder.decode(url); // the url is "Siwy+%26+Para+Wino"
然后我打印出来,我仍然看到“Siwy +%26 + Para + Wino”

有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:3)

来自the documentation (of URLDecoder)

  

此类用于解码以application / x-www-form-urlencoded MIME内容类型编码的字符串。

我们可以查看at the specification以查看form-urlencoded MIME类型是什么:

  

转义表单字段名称和值:空格字符替换为“+”,然后根据[URL]转义保留字符;也就是说,非字母数字字符被'%HH'替换,百分号和两个十六进制数字代表字符的ASCII代码。与多行文本字段值一样,换行符表示为CR LF对,即“%0D%0A”。

由于规范要求百分号后跟两个ASCII码的十六进制数字,因此第一次调用decode(String s)方法时,它会将这些数字转换为单个字符,留下另外两个字符{{1} } 完整。值26转换为%25,因此第一次解码后的结果为%。再次运行解码只需将%26转换回%26

&

如果你有UTF-8编码的字符串,你也可以使用Uri类:

  

使用UTF-8方案解码'%' - 给定字符串中的转义八位字节。

然后使用:

String decoded_result = URLDecoder.decode(URLDecoder.decode(url));

答案 1 :(得分:1)

感谢所有答案,我终于解决了......

溶液:

在我使用URLDecoder.decode两次之后(天啊),我得到了我想要的东西。

String temp = URLDecoder.decode( url); //      url = "Siwy%2B%2526%2BPara%2BWino"
String result = URLDecoder.decode( temp ); // temp = "Siwy+%26+Para+Wino"

// result =  "Swy & Para Wino". !!! oh good job.

但我仍然不知道为什么......有人可以告诉我吗?