Sni*_*per 6 java urlencode utf-8 rfc upi
我有一个用例,我必须解码URI的queryParameter并执行操作(超出此问题的范围).
假设我有一个URI,我必须解码它.现在我知道目前所有的%20都将被转换为空格,而创建URI 空间应该用%20来表示,但可能会出现我可能获得带%作为空间的URI的情况.因此,我想将%转换为空格以保持向后兼容性.最后有一个注释有助于理解这个问题.
我尝试过replaceall() %,%20但是后来%20又会变成%2020许多其他例外.
这是读取UPI URI所必需的,根据NPCI的官方文件:
注意:考虑到当前的PSP应用程序被开发为"%"作为空格(""),银行PSP应该同时支持"%"和"%20",直到生态系统与修订版对齐为止.因此,应确保向后兼容性.
编辑1基于pshemo评论 -
我试过了
str.replaceAll("%(?![0-9a-fA-F])","%20")
Run Code Online (Sandbox Code Playgroud)
一个不满足上述正则表达式的案例是"upi:// pay?pa = praksh%40kmbl&pn = Prakash%Abmar&cu = INR"
输出是pn - > Prakash" some othercharacter "mar
可能不是您想要的答案,但这可能会有所帮助:
public class Test {
public static void main(String... a) {
try {
//
String u = "upi://pay?pa=praksh%40kmbl&pn=Prakash%Abmar&cu=INR";
System.out.println(decode(u));
} catch (Exception e) {
e.printStackTrace();
}
}
private static String decode(String in) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < in.length(); i++) {
char c = in.charAt(i);
if (c == '%') {
int decoded = Integer.parseInt(in.substring(i + 1, i + 3), 16);
if (decoded >= 32 && decoded <= 126) { //Possible valid char
sb.append((char) decoded);
i += 2;
} else { //not a valid char... maybe a space
sb.append(" ");
}
} else if (c == '+') {
sb.append(" ");
} else {
sb.append(c);
}
}
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
有很多可能性,因此您可能需要一个“定制”解决方案。上面的代码涵盖了一些情况。
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |