Android(java) 相当于 NSString stringByAddingPercentEscapesUsingEncoding :?

标签 android url encoding urlencode

我正在寻找与 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/

相关文章:

java - J2ME读取不同语言(编码)的文件

java - 安卓工作室;启动至 USB 设备(手机),安装但无法打开

android - Room DataSource.Factory 的 Kotlin 协程挂起错误

android - 图像校准与相机校准

java - org.apache.commons.io.FileUtils.readFileToString 和文件路径中的空白

c++ - 如何在 C++ 控制台中编写西里尔文文本

android - 如何在android中拥有全局菜单?

python - 如何在 django 中生成 url

php - 我正在从外部 URL 提取数据,但无法让 javascript 函数正常工作

php - json_encode() 非 utf-8 字符串?