我正在寻找与 Java 中的 stringByAddingPercentEscapesUsingEncoding
方法(适用于 Android)等效的方法。
我尝试了 URLEncoder.encode()
但效果不一样。
我不希望“/”或“:”是“转义百分比”,但“œ”(例如)应该是。
有什么想法吗?
编辑:
我只是不想让 http://变成 http%3a%2f%2f
最佳答案
如果你想保持 :
和 /
不变,我认为你需要自己做,因为那不是有效的百分比编码,因此机会很小对于java中已经存在的解决方案。我还检查了 stringByAddingPercentEscapesUsingEncoding
的文档,它的行为也不是那样的。
对比文档,URLEncoder.encode(string,encoding)
和NS方法一模一样,所以你的要求确实很奇怪。无论如何,这是自定义代码:
public static String stringByAddingPercentEscapesUsingEncoding( String input, String charset ) throws UnsupportedEncodingException {
byte[] bytes = input.getBytes(charset);
StringBuilder sb = new StringBuilder(bytes.length);
for( int i = 0; i < bytes.length; ++i ) {
int cp = bytes[i] < 0 ? bytes[i] + 256 : bytes[i];
if( cp <= 0x20 || cp >= 0x7F || (
cp == 0x22 || cp == 0x25 || cp == 0x3C ||
cp == 0x3E || cp == 0x20 || cp == 0x5B ||
cp == 0x5C || cp == 0x5D || cp == 0x5E ||
cp == 0x60 || cp == 0x7b || cp == 0x7c ||
cp == 0x7d
)) {
sb.append( String.format( "%%%02X", cp ) );
}
else {
sb.append( (char)cp );
}
}
return sb.toString();
}
public static String stringByAddingPercentEscapesUsingEncoding( String input ) {
try {
return stringByAddingPercentEscapesUsingEncoding(input, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Java platforms are required to support UTF-8");
// will never happen
}
}
public static void main(String[] args) {
System.out.println(
stringByAddingPercentEscapesUsingEncoding("http://en.wikipedia.org/wiki/ϊsd")
);
//http://en.wikipedia.org/wiki/%C5%93%C3%A4sd
}
关于Android(java) 相当于 NSString stringByAddingPercentEscapesUsingEncoding :?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13878365/