static public String encode()

in jena-core/src/main/java/org/apache/jena/util/URIref.java [49:100]


    static public String encode(String unicode) {
        byte utf8[] = unicode.getBytes(StandardCharsets.UTF_8);
        byte rsltAscii[] = new byte[utf8.length*6];
        int in = 0;
        int out = 0;
        while ( in < utf8.length ) {
            switch ( utf8[in] ) {
                case (byte)'a': case (byte)'b': case (byte)'c': case (byte)'d': case (byte)'e': case (byte)'f': case (byte)'g': case (byte)'h': case (byte)'i': case (byte)'j': case (byte)'k': case (byte)'l': case (byte)'m': case (byte)'n': case (byte)'o': case (byte)'p': case (byte)'q': case (byte)'r': case (byte)'s': case (byte)'t': case (byte)'u': case (byte)'v': case (byte)'w': case (byte)'x': case (byte)'y': case (byte)'z':
                case (byte)'A': case (byte)'B': case (byte)'C': case (byte)'D': case (byte)'E': case (byte)'F': case (byte)'G': case (byte)'H': case (byte)'I': case (byte)'J': case (byte)'K': case (byte)'L': case (byte)'M': case (byte)'N': case (byte)'O': case (byte)'P': case (byte)'Q': case (byte)'R': case (byte)'S': case (byte)'T': case (byte)'U': case (byte)'V': case (byte)'W': case (byte)'X': case (byte)'Y': case (byte)'Z':
                case (byte)'0': case (byte)'1': case (byte)'2': case (byte)'3': case (byte)'4': case (byte)'5': case (byte)'6': case (byte)'7': case (byte)'8': case (byte)'9':
                case (byte)';': case (byte)'/': case (byte)'?': case (byte)':': case (byte)'@': case (byte)'&': case (byte)'=': case (byte)'+': case (byte)'$': case (byte)',':
                case (byte)'-': case (byte)'_': case (byte)'.': case (byte)'!': case (byte)'~': case (byte)'*': case (byte)'\'': case (byte)'(': case (byte)')':
                case (byte)'#':
                case (byte)'[': case (byte)']':
                    rsltAscii[out] = utf8[in];
                out++;
                in++;
                break;
                default : // case (byte) '%':
                    if (utf8[in] == '%')
                    {

                        try
                        {
                            if (in + 2 < utf8.length)
                            {
                                byte first = hexEncode(hexDecode(utf8[in + 1])) ;
                                byte second = hexEncode(hexDecode(utf8[in + 2])) ;
                                rsltAscii[out++] = (byte)'%' ;
                                rsltAscii[out++] = first ;
                                rsltAscii[out++] = second ;
                                in += 3 ;
                                break ;
                            }
                        } catch (IllegalArgumentException e)
                        {
                            // Illformed - should issue message ....
                            Log.error(URIReference.class, "Confusing IRI to encode - contains literal '%': " + unicode) ;
                            // Fall through.
                        }
                    }
                    rsltAscii[out++] = (byte)'%' ;
                    // Get rid of sign ...
                    int c = (utf8[in]) & 255 ;
                    rsltAscii[out++] = hexEncode(c / 16) ;
                    rsltAscii[out++] = hexEncode(c % 16) ;
                    in++ ;
                    break ;
            }
        }
        return new String(rsltAscii,0,out,StandardCharsets.UTF_8);
    }