2

stringByAddingPercentEscapesUsingEncodingJava (Android 用)のメソッドに相当するものを探しています。

私は試しURLEncoder.encode()ましたが、同じことはしません。

"/" や ":" が "パーセント エスケープ" されるとは思いませんが、"œ" (たとえば) はそうであるべきです。

何か案は?

編集:

http:// を http%3a%2f%2f にしたくないだけです

4

1 に答える 1

3

:そのままにしておきたい場合/は、自分で行う必要があると思います。これは有効なパーセントエンコーディングではなく、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

}
于 2012-12-14T12:20:15.113 に答える