2017-09-15 16 views
-1

xml形式のデータをバイト(base64)にデコードしようとしていますが、問題が発生しています。私は、文字列データを受け取り、このようなバイトに変換し、Javaでプログラムを書いた:Base64エンコーディング:不正なbase64文字3c

String data = "......"; //string of data in xml format 
byte[] dataBytes = Base64.getDecoder().decode(data); 

これが失敗し、私を与えると、このような例外:

java.lang.IllegalArgumentException: Illegal base64 character 3c 
    at java.util.Base64$Decoder.decode0(Base64.java:714) 
    at java.util.Base64$Decoder.decode(Base64.java:526) 
    at java.util.Base64$Decoder.decode(Base64.java:549) 
    at XmlReader.main(XmlReader.java:61) 

と互換性のないXMLフォーマットですベース64?角括弧 '<>'

+0

だけでなく、 'data'は何ですか? – luk2302

+0

<バージョン説明= "....." productname = "....." productversion = "1.0" validvalues = "...."> 1.0 – VMA92

+0

これは**です** base64でエンコードされたStringではありません。 – luk2302

答えて

0

のおかげで問題が発生したようです。@ luk2302のおかげで問題を解決できました。文字列をデコードする前に、私はあなたが最初の(一部の文字エンコーディングの)文字列からバイトを取得する必要があります最初にBase64

byte[] dataBytes = Base64.getEncoder().encode(data.getBytes()); 
    dataBytes = Base64.getDecoder().decode(dataBytes); 
0

にそれをエンコードする必要があります。

これらのバイトの場合、エンコーダを使用してそのバイトのBase64表現を作成します。

このBase64文字列は、バイトに戻してデコードし、同じエンコードでこれらのバイトを文字列に変換できます。

import java.nio.charset.StandardCharsets; 
import java.util.Base64; 

public class Base64Example { 

    public static void main(String[] args) { 
    final String xml = "<root-node><sub-node/></root-node>"; 
    final byte[] xmlBytes = xml.getBytes(StandardCharsets.UTF_8); 
    final String xmlBase64 = Base64.getEncoder().encodeToString(xmlBytes); 
    System.out.println(xml); 
    System.out.println(xmlBase64); 

    final byte[] xmlBytesDecoded = Base64.getDecoder().decode(xmlBase64); 
    final String xmlDecoded = new String(xmlBytesDecoded, StandardCharsets.UTF_8); 
    System.out.println(xmlDecoded); 
    } 

} 

出力は次のとおりです。

<root-node><sub-node/></root-node> 
PHJvb3Qtbm9kZT48c3ViLW5vZGUvPjwvcm9vdC1ub2RlPg== 
<root-node><sub-node/></root-node> 
関連する問題