我在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”
有人可以告诉我为什么吗?
答案 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.
但我仍然不知道为什么......有人可以告诉我吗?