package com.fsck.k9.mail.store.imap; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CodingErrorAction; import com.beetstra.jutf7.CharsetProvider; class FolderNameCodec { private final Charset modifiedUtf7Charset; private final Charset asciiCharset; public static FolderNameCodec newInstance() { return new FolderNameCodec(); } private FolderNameCodec() { modifiedUtf7Charset = new CharsetProvider().charsetForName("X-RFC-3501"); asciiCharset = Charset.forName("US-ASCII"); } public String encode(String folderName) { ByteBuffer byteBuffer = modifiedUtf7Charset.encode(folderName); byte[] bytes = new byte[byteBuffer.limit()]; byteBuffer.get(bytes); return new String(bytes, asciiCharset); } public String decode(String encodedFolderName) throws CharacterCodingException { CharsetDecoder decoder = modifiedUtf7Charset.newDecoder().onMalformedInput(CodingErrorAction.REPORT); ByteBuffer byteBuffer = ByteBuffer.wrap(encodedFolderName.getBytes(asciiCharset)); CharBuffer charBuffer = decoder.decode(byteBuffer); return charBuffer.toString(); } }