/** * */ package org.archive.wayback.util.url; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; /** * * Transcode the first group in the matched pattern. * * TODO make group(s) configurable. * * @author ngiraud * */ public class UriTranscoder extends PatternBasedTextProcessor { private static final Logger LOGGER = Logger.getLogger(UriTranscoder.class.getName()); private String sourceEncoding; private String targetEncoding; public String getSourceEncoding() { return sourceEncoding; } public void setSourceEncoding(String sourceEncoding) { this.sourceEncoding = sourceEncoding; } public String getTargetEncoding() { return targetEncoding; } public void setTargetEncoding(String targetEncoding) { this.targetEncoding = targetEncoding; } @Override public String process(final String uriAsString) { Matcher m = getMatcher(uriAsString); StringBuilder result = new StringBuilder(uriAsString); while (m.find()) { int start = m.start(1); int end = m.end(1); try { String decodedGroup = URLDecoder.decode( uriAsString.substring(start, end), getSourceEncoding()); result.replace( start, end, URLEncoder.encode(decodedGroup, getTargetEncoding())); } catch (UnsupportedEncodingException e) { LOGGER.log(Level.SEVERE, e.getLocalizedMessage(), e); } } return result.toString(); } }