Tôi gặp sự cố khi chuyển đổi văn bản thành chuỗi Base64 trong Java (Android) và .NET (Visual Basic). Dạng đồng bằng (có thể đọc được) của các ký tự ASCII chuyển đổi tốt. Nhưng khi nói đến các ký tự đặc biệt (các ký tự có mã lớn hơn 128), chúng tạo ra rắc rối cho tôi.Java và .NET: Sự nhầm lẫn chuyển đổi Base64
Ví dụ: tôi thử chuyển đổi mã ký tự có giá trị ASCII là 65 (ký tự "A").
Mã của tôi Java là:
char a = 65;
String c = String.valueOf(a);
byte bt[] = c.getBytes();
String result = Base64.encodeToString(bt, Base64.DEFAULT);
Và mã NET của tôi là:
Dim c As String = Chr(65)
Dim result as String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(c))
Những cả trả lại kết quả tương tự: "QQ ==". Điều này là tốt. Nhưng khi tôi thử chuyển đổi một ký tự đặc biệt, ví dụ như một mã ký tự 153. Sau đó, nó trả về các kết quả khác nhau.
char a = 153;
String c = String.valueOf(a);
byte bt[] = c.getBytes();
String result = Base64.encodeToString(bt, Base64.DEFAULT);
này trả về "WPK ="
Và mã NET cùng của tôi:
Dim c As String = Chr(153)
Dim result as String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(c))
này trả về "4oSi"
này rất kỳ lạ. Có gì sai ở đây Tôi đang sử dụng các thư viện Base64 gốc trên cả hai nền tảng. Có gì sai với mã của tôi không?
Bạn đang sử dụng UTF8 cho C# một và Java sử dụng unicode. Hãy thử sử dụng unicode trong cả hai. – Wug
BTW - bạn nghĩ nhân vật 153 đại diện cho điều gì? Nó không thể in được bằng Unicode. Đó là nhãn hiệu (TM) trong ISO-8859-1. –
Tôi đã thử sử dụng Unicode trên cả hai, vẫn có sự khác biệt. .NET hiện trả về "IiE =" trong khi Java vẫn trả về "wpk =". Có 153 có thể là dấu hiệu thương hiệu. Nhưng mã của tôi chỉ đơn giản là cố gắng để thực hiện một mã hóa bằng cách xáo trộn mã ký tự để chúng thay đổi bất cứ nơi nào giữa 0-255. Sau đó, để truyền tải an toàn qua internet, tôi cần phải chuyển nó sang Base64. –