Here you can find the source of encodeURIString(Writer out, String text, String encoding, int start)
static private void encodeURIString(Writer out, String text, String encoding, int start) throws IOException, UnsupportedEncodingException
//package com.java2s; /*//from w w w .j a v a2 s . c om * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://javaserverfaces.dev.java.net/CDDL.html or * legal/CDDLv1.0.txt. * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * [Name of File] [ver.__] [Date] * * Copyright 2006 Sun Microsystems Inc. All Rights Reserved */ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.BitSet; public class Main { static private final int MAX_BYTES_PER_CHAR = 10; static private final BitSet DONT_ENCODE_SET = new BitSet(256); static private void encodeURIString(Writer out, String text, String encoding, int start) throws IOException, UnsupportedEncodingException { ByteArrayOutputStream buf = null; OutputStreamWriter writer = null; char[] charArray = null; int length = text.length(); for (int i = start; i < length; i++) { char ch = text.charAt(i); if (DONT_ENCODE_SET.get(ch)) { out.write(ch); } else { if (buf == null) { buf = new ByteArrayOutputStream(MAX_BYTES_PER_CHAR); if (encoding != null) { writer = new OutputStreamWriter(buf, encoding); } else { writer = new OutputStreamWriter(buf); } charArray = new char[1]; } // convert to external encoding before hex conversion try { // An inspection of OutputStreamWriter reveals // that write(char) always allocates a one element // character array. We can reuse our own. charArray[0] = ch; writer.write(charArray, 0, 1); writer.flush(); } catch (IOException e) { buf.reset(); continue; } byte[] ba = buf.toByteArray(); for (int j = 0; j < ba.length; j++) { writeURIDoubleHex(out, ba[j] + 256); } buf.reset(); } } } static private void writeURIDoubleHex(Writer out, int i) throws IOException { out.write('%'); out.write(intToHex((i >> 4) % 0x10)); out.write(intToHex(i % 0x10)); } static private char intToHex(int i) { if (i < 10) return ((char) ('0' + i)); else return ((char) ('A' + (i - 10))); } }