Non riesco a convertire il testo nella stringa Base64 in Java (Android) e .NET (Visual Basic). La semplice forma (leggibile) di caratteri ASCII converte bene. Ma quando si tratta di personaggi speciali (personaggi il cui codice è maggiore di 128), stanno creando problemi per me.Java e .NET: confusione di conversione Base64
Ad esempio, provo a convertire un codice di carattere il cui valore ASCII è 65 (il carattere "A").
codice Java è mio:
char a = 65;
String c = String.valueOf(a);
byte bt[] = c.getBytes();
String result = Base64.encodeToString(bt, Base64.DEFAULT);
E il mio codice .NET è:
Dim c As String = Chr(65)
Dim result as String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(c))
Questi entrambi restituire lo stesso risultato: "QQ ==". Questo va bene. Ma quando provo a convertire un carattere speciale, ad esempio un codice di carattere 153, restituisce risultati diversi.
char a = 153;
String c = String.valueOf(a);
byte bt[] = c.getBytes();
String result = Base64.encodeToString(bt, Base64.DEFAULT);
Ciò restituisce "PLC ="
E il mio stesso codice .NET:
Dim c As String = Chr(153)
Dim result as String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(c))
Ciò restituisce "4oSi"
Questo è così strano. Cosa c'è di sbagliato qui. Sto usando le librerie native Base64 su entrambe le piattaforme. C'è qualcosa che non va nel mio codice?
Si sta utilizzando UTF8 per C# e Java utilizza Unicode. Prova ad usare l'unicode in entrambi. – Wug
BTW - cosa pensi che rappresenti il personaggio 153? Non è stampabile in Unicode. È un marchio (TM) in ISO-8859-1. –
Ho provato ad usare Unicode su entrambi, ancora ci sono differenze. .NET ora restituisce "IiE =" mentre Java restituisce ancora "wpk =". Sì 153 potrebbe essere il segno del marchio. Ma il mio codice sta semplicemente cercando di eseguire una crittografia rimescolando codici carattere in modo da variare tra 0-255. Quindi per trasmettere in modo sicuro su Internet ho bisogno di convertirlo in Base64. –