2016-02-09 13 views
5

Tôi có một chuỗi được mã hóa base64. Có vẻ như sau:Base64: Mảng byte đầu vào có byte kết thúc không chính xác tại 40

eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0= 

Bất kỳ công cụ trực tuyến nào cũng có thể giải mã chuỗi này thành {"bla1":"bla1","bla2":"bla2"}. Tuy nhiên, thực hiện Java của tôi thất bại:

import java.util.Base64; 
System.out.println("payload = " + payload); 
String json = new String(Base64.getDecoder().decode(payload)); 

Tôi nhận được lỗi sau:

payload = eyJibGExIjoiYmxhMSIsImJsYTIiOiJibGEyIn0= 
java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 40 

Điều gì là sai với mã của tôi?

+0

[Không thể sao chép] (http://ideone.com/z07TWN), một char bổ sung ở cuối chuỗi sẽ làm tăng ngoại lệ chính xác đó ... –

+0

Nhưng từ đâu bạn nhận được chuỗi được mã hóa? làm thế nào để bạn vượt qua nó để các biến tải trọng ?, bởi vì như bạn nói, nó hoạt động ... Tôi vừa thử nghiệm nó với Java 8 và không có vấn đề. –

Trả lời

8

OK, tôi đã phát hiện ra. Chuỗi gốc được mã hóa trên thiết bị Android sử dụng android.util.Base64 bởi Base64.encodeToString(json.getBytes("UTF-8"), Base64.DEFAULT);. Nó sử dụng sơ đồ mã hóa android.util.Base64.DEFAULT.

Sau đó, ở phía máy chủ khi sử dụng java.util.Base64 điều này đã được giải mã với Base64.getMimeDecoder().decode(payload)không với Base64.getDecoder().decode(payload)

+0

Nó làm việc cho tôi, cảm ơn bạn. –

0

Tôi đã cố gắng sử dụng các dây từ args. Tôi thấy rằng nếu tôi sử dụng arg[0].trim() rằng nó làm cho nó hoạt động. ví dụ:

Base64.getDecoder().decode(arg[0].trim()); 

Tôi đoán có một số loại khoảng trắng bị làm rối tung lên.

Các vấn đề liên quan