【问题标题】:Base64 decode in C# or JavaC# 或 Java 中的 Base64 解码
【发布时间】:2009-12-16 16:34:28
【问题描述】:

我有一个带有以下标头的 Base64 编码对象:

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

继续解码对象的最佳方法是什么?我需要剥离第一行吗?另外,如果我把它变成一个字节数组(byte[]),我如何解压缩它?

谢谢!


我想我一开始说错了。通过说标题是

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

我的意思是这是文件的第一行。那么,为了使用 Java 或 C# 库来解码文件,是否需要剥离这一行?

如果是这样,去除第一行的最简单方法是什么?

【问题讨论】:

    标签: c# java base64


    【解决方案1】:

    要在 C# 中解码 Base64 内容,您可以使用 Convert Class static methods

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

    您还可以使用GZipStream Class 来帮助处理 GZipped 流。

    另一个选项是SharpZipLib。这将允许您从压缩数据中提取原始数据。

    【讨论】:

      【解决方案2】:

      我能够使用以下代码将 .xfdl 文档转换为 Java DOM 文档。

      我使用iHarder's 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.");
              }
          }
      

      仍在努力成功地修改和重新编码文档。

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        在 Java 中,您可以使用 Apache Commons Base64 class

        String decodedString = new String(Base64.decodeBase64(encodedBytes));
        

        【讨论】:

          【解决方案4】:

          听起来您正在处理 gzip 压缩和 Base 64 编码的数据。剥离任何 mime 标头后,您应该使用 Apache commons 编解码器之类的东西将 Base64 数据转换为字节数组。然后,您可以将 byte[] 包装在 ByteArrayInputStream 对象中并将其传递给 GZipInputStream,这样您就可以读取未压缩的数据。

          【讨论】:

            【解决方案5】:

            对于java,你试过java内置的java.util.zip包吗?或者,Apache Commons 有 Commons Compress 库来处理 zip、tar 和其他压缩文件类型。至于解码Base 64,有几个开源库,也可以使用Sun的sun.misc.BASE64Decoder类。

            【讨论】:

              【解决方案6】:

              从别处复制,对于 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();
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-08-13
                • 2012-12-05
                • 2010-09-15
                • 2014-02-14
                • 2011-11-14
                • 1970-01-01
                相关资源
                最近更新 更多