Author: niklas Date: Mon Jul 21 03:36:57 2008 New Revision: 678387 URL: http://svn.apache.org/viewvc?rev=678387&view=rev Log: Resolved MIME4J-63: CodecUtil.encodeQuotedPrintableBinary() now handles 8bit bytes as expected.
Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java?rev=678387&r1=678386&r2=678387&view=diff ============================================================================== --- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java (original) +++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/CodecUtil.java Mon Jul 21 03:36:57 2008 @@ -138,11 +138,14 @@ if (--nextSoftBreak <= QUOTED_PRINTABLE_OCTETS_PER_ESCAPE) { softBreak(); } + + int nextUnsigned = (int) next & 0xff; + write(EQUALS); --nextSoftBreak; - write(HEX_DIGITS[next >> 4]); + write(HEX_DIGITS[nextUnsigned >> 4]); --nextSoftBreak; - write(HEX_DIGITS[next % 0x10]); + write(HEX_DIGITS[nextUnsigned % 0x10]); } private void write(byte next) throws IOException { Modified: james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java?rev=678387&r1=678386&r2=678387&view=diff ============================================================================== --- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java (original) +++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/util/CodecUtilTest.java Mon Jul 21 03:36:57 2008 @@ -58,6 +58,15 @@ String actual = new String(out.toByteArray(), "US-ASCII"); assertEquals(expected, actual); } + + public void testEncodeQuotedPrintableNonAsciiChars() throws Exception { + String s = "7bit content with euro \u20AC symbol"; + InputStream in = new ByteArrayInputStream(s.getBytes("iso-8859-15")); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + CodecUtil.encodeQuotedPrintableBinary(in, out); + String actual = new String(out.toByteArray(), "US-ASCII"); + assertEquals("7bit=20content=20with=20euro=20=A4=20symbol", actual); + } private void assertEquals(byte[] expected, byte[] actual) { StringBuffer buffer = new StringBuffer(expected.length); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]