Декодирование Base64 в C # или Java - PullRequest
2 голосов
/ 16 декабря 2009

У меня есть объект в кодировке Base64 со следующим заголовком:

application/x-xfdl;content-encoding="asc-gzip"

Как лучше всего приступить к декодированию объекта? Нужно ли раздевать первую строку? Кроме того, если я превращаю его в байтовый массив (byte []), как мне распаковать его?

Спасибо!


Я думаю, что изначально ошибся. Говоря, заголовок был

application/x-xfdl;content-encoding="asc-gzip"

Я имел в виду, что это была первая строка файла. Итак, чтобы использовать библиотеки Java или C # для декодирования файла, нужно ли эту строку убирать?

Если это так, какой самый простой способ удалить первую строку?

Ответы [ 6 ]

12 голосов
/ 16 декабря 2009

Для декодирования содержимого Base64 в C # вы можете использовать статические методы Convert Class .

byte[] bytes = Convert.FromBase64String(base64Data);

Вы также можете использовать GZipStream Class , чтобы помочь справиться с потоком GZipped.

Другой вариант - SharpZipLib . Это позволит вам извлечь исходные данные из сжатых данных.

2 голосов
/ 11 ноября 2010

Мне удалось использовать следующий код для преобразования документа .xfdl в документ Java DOM.

Я использовал утилиту iHarder Base64 для декодирования Base64.

private static final String FILE_HEADER_BLOCK = 
        "application/vnd.xfdl;content-encoding=\"base64-gzip\"";  

    public static Document OpenXFDL(String inputFile) 
            throws IOException, 
                ParserConfigurationException,
                SAXException

    {
        try{

            //create file object
            File f = new File(inputFile);
            if(!f.exists()) {
                throw new IOException("Specified File could not be found!");
            }

            //open file stream from file
            FileInputStream fis = new FileInputStream(inputFile);

            //Skip past the MIME header
            fis.skip(FILE_HEADER_BLOCK.length());   

            //Decompress from base 64                   
            Base64.InputStream bis = new Base64.InputStream(fis, 
                    Base64.DECODE);

            //UnZIP the resulting stream
            GZIPInputStream gis = new GZIPInputStream(bis);

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(gis);

            gis.close();
            bis.close();
            fis.close();

            return doc;
        }
        catch (ParserConfigurationException pce) {
            throw new ParserConfigurationException("Error parsing XFDL from file.");
        }
        catch (SAXException saxe) {
            throw new SAXException("Error parsing XFDL into XML Document.");
        }
    }

Все еще работаем над успешной модификацией и перекодированием документа.

Надеюсь, это поможет.

2 голосов
/ 16 декабря 2009

В Java вы можете использовать Apache Commons Base64 класс

String decodedString = new String(Base64.decodeBase64(encodedBytes));
1 голос
/ 16 декабря 2009

Звучит так, как будто вы имеете дело с данными, сжатыми как в gzip, так и в Base 64. После удаления заголовков MIME вы должны преобразовать данные Base64 в байтовый массив, используя нечто вроде кодека Apache commons. Затем вы можете обернуть byte [] в объект ByteArrayInputStream и передать его в GZipInputStream, который позволит вам читать несжатые данные.

0 голосов
/ 24 января 2012

Скопировано из другого места, для Base64 я ссылаюсь на commons-codec-1.6.jar:

public static String decode(String input) throws Exception {
    byte[] bytes = Base64.decodeBase64(input);
    BufferedReader in = new BufferedReader(new InputStreamReader(
            new GZIPInputStream(new ByteArrayInputStream(bytes))));
    StringBuffer buffer = new StringBuffer();
    char[] charBuffer = new char[1024]; 
    while(in.read(charBuffer) != -1) {
        buffer.append(charBuffer);
    }
    return buffer.toString();
}
0 голосов
/ 16 декабря 2009

Для java, вы пробовали встроенный в java пакет java.util.zip? Кроме того, Apache Commons имеет библиотеку Commons Compress для работы с zip, tar и другими типами сжатых файлов. Что касается декодирования Base 64, есть несколько библиотек с открытым исходным кодом, или вы можете использовать класс Sun.misc.BASE64Decoder от Sun.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...