package cyrille.codec; import java.io.UnsupportedEncodingException; import org.apache.commons.codec.binary.Base64; import junit.framework.TestCase; public class CommonsCodecBase64Test extends TestCase { public void testBase64EncodeDecodeUtf8() throws Exception { String xmlEncoding = "UTF-8"; testBase64EncodeDecode(xmlEncoding); } public void testBase64EncodeDecodeIso88591() throws Exception { String xmlEncoding = "ISO-8859-1"; testBase64EncodeDecode(xmlEncoding); } private void testBase64EncodeDecode(String xmlEncoding) throws UnsupportedEncodingException { System.out.println("> testBase64EncodeDecode(" + xmlEncoding + ")"); String xmlAsString = "<root><my-element>����</my-element></root>"; System.out.println("\t xmlAsString\t" + xmlAsString); String xmlAsBase64String = base64Encode(xmlAsString, xmlEncoding); System.out.println("\t xmlAsBase64\t" + xmlAsBase64String); byte[] decodedBased64Xml = base64Decode(xmlAsBase64String); String decodedBase64XmlAsString = new String(decodedBased64Xml, xmlEncoding); assertTrue("Accents lost", decodedBase64XmlAsString.indexOf("����") > 0); } private String base64Encode(String xmlAsString, String xmlEncoding) throws UnsupportedEncodingException { String xmlencodingDeclaration = "<?xml version=\"1.0\" encoding=\"" + xmlEncoding + "\"?>"; byte[] xmlAsBytes = (xmlencodingDeclaration + xmlAsString).getBytes(xmlEncoding); byte[] xmlAsBase64 = Base64.encodeBase64(xmlAsBytes); String xmlAsBase64String = new String(xmlAsBase64, "ascii"); return xmlAsBase64String; } private byte[] base64Decode(String xmlAsBase64String) throws UnsupportedEncodingException { byte[] xmlAsBase64 = Base64.decodeBase64(xmlAsBase64String.getBytes("ascii")); return xmlAsBase64; } }